Add capture screenshot button
This commit is contained in:
@@ -379,6 +379,13 @@ function ui_menubar_draw_category_items() {
|
|||||||
project_set_default_envmap();
|
project_set_default_envmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ui_menu_button(tr("Capture Screenshot"))) {
|
||||||
|
sys_notify_on_next_frame(function() {
|
||||||
|
viewport_capture_screenshot();
|
||||||
|
});
|
||||||
|
ui.changed = false; // Close menu
|
||||||
|
}
|
||||||
|
|
||||||
context_update_envmap();
|
context_update_envmap();
|
||||||
|
|
||||||
if (ui.changed) {
|
if (ui.changed) {
|
||||||
|
|||||||
@@ -92,3 +92,33 @@ function viewport_update_camera_type(camera_type: i32) {
|
|||||||
camera_object_build_proj(cam);
|
camera_object_build_proj(cam);
|
||||||
context_raw.ddirty = 2;
|
context_raw.ddirty = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function viewport_capture_screenshot() {
|
||||||
|
let rt: render_target_t = map_get(render_path_render_targets, "last");
|
||||||
|
let tex: gpu_texture_t = rt._image;
|
||||||
|
let screenshot: gpu_texture_t = gpu_create_render_target(512, 512);
|
||||||
|
let r: f32 = sys_w() / sys_h();
|
||||||
|
draw_begin(screenshot);
|
||||||
|
draw_scaled_image(tex, -(512 * r - 512) / 2, 0, 512 * r, 512);
|
||||||
|
draw_end();
|
||||||
|
|
||||||
|
if (project_raw.packed_assets == null) {
|
||||||
|
project_raw.packed_assets = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
let num: i32 = 0;
|
||||||
|
let abs: string = "/packed/screenshot0.png";
|
||||||
|
for (let i: i32 = 0; i < project_raw.packed_assets.length; ++i) {
|
||||||
|
let pa: packed_asset_t = project_raw.packed_assets[i];
|
||||||
|
if (pa.name == abs) {
|
||||||
|
i = 0;
|
||||||
|
num++;
|
||||||
|
abs = "/packed/screenshot" + num + ".png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let pa: packed_asset_t = {name : abs, bytes : gpu_get_texture_pixels(screenshot)};
|
||||||
|
array_push(project_raw.packed_assets, pa);
|
||||||
|
map_set(data_cached_images, abs, screenshot);
|
||||||
|
import_texture_run(abs);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user