forked from StrafesNET/roblox-bot-player
hi
This commit is contained in:
@@ -1,21 +1,69 @@
|
||||
use strafesnet_graphics::setup;
|
||||
use std::io::Write;
|
||||
|
||||
pub async fn setup_and_start(){
|
||||
println!("Initializing the surface...");
|
||||
let vulkan_instance = vk_video::VulkanInstance::new().unwrap();
|
||||
let vulkan_adapter = vulkan_instance.create_adapter(None).unwrap();
|
||||
let vulkan_device = vulkan_adapter
|
||||
.create_device(
|
||||
wgpu::Features::IMMEDIATES,
|
||||
wgpu::ExperimentalFeatures::disabled(),
|
||||
wgpu::Limits {
|
||||
max_immediate_size: 4,
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let instance=setup::step1::create_instance();
|
||||
let width = core::num::NonZeroU32::new(1920).unwrap();
|
||||
let height = core::num::NonZeroU32::new(1080).unwrap();
|
||||
let target_framerate = 60.into();
|
||||
let average_bitrate = 500_000;
|
||||
let max_bitrate = 2_000_000;
|
||||
|
||||
let surface=setup::step2::create_surface(&instance,&window).unwrap();
|
||||
let wgpu_state = WgpuState::new(
|
||||
vulkan_device.wgpu_device(),
|
||||
vulkan_device.wgpu_queue(),
|
||||
width,
|
||||
height,
|
||||
);
|
||||
|
||||
let adapter=setup::step3::pick_adapter(&instance,&surface).await.expect("No suitable GPU adapters found on the system!");
|
||||
let mut encoder = vulkan_device
|
||||
.create_wgpu_textures_encoder(
|
||||
vulkan_device
|
||||
.encoder_parameters_high_quality(
|
||||
vk_video::parameters::VideoParameters {
|
||||
width,
|
||||
height,
|
||||
target_framerate,
|
||||
},
|
||||
vk_video::parameters::RateControl::VariableBitrate {
|
||||
average_bitrate,
|
||||
max_bitrate,
|
||||
virtual_buffer_size: std::time::Duration::from_secs(2),
|
||||
},
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let (device,queue)=setup::step4::request_device(&adapter).await.unwrap();
|
||||
let mut output_file = std::fs::File::create("output.h264").unwrap();
|
||||
|
||||
let size=window.inner_size();
|
||||
let config=setup::step5::configure_surface(&adapter,&device,&surface,(size.width,size.height)).unwrap();
|
||||
for i in 0..frame_count {
|
||||
let time = 1.0 / 30.0 * i as f32;
|
||||
wgpu_state.render(time);
|
||||
|
||||
// load files
|
||||
let res = unsafe {
|
||||
encoder
|
||||
.encode(
|
||||
vk_video::Frame {
|
||||
data: wgpu_state.texture.clone(),
|
||||
pts: None,
|
||||
},
|
||||
false,
|
||||
)
|
||||
.unwrap()
|
||||
};
|
||||
|
||||
println!("Entering event loop...");
|
||||
// render frames here...
|
||||
output_file.write_all(&res.data).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user