chore: checkpoint web Blender migration source, tools and docs
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
mes123456
2026-11-10 11:18:01 +08:00
parent 122142c26c
commit f3e21c6b98
6887 changed files with 257154 additions and 12294 deletions

View File

@@ -36,6 +36,13 @@ class GHOST_IContext;
namespace blender {
#ifdef WITH_WEB
/* Completed native saves and file-selector exports consumed by the browser GPU frame. */
void WM_web_publish_save(const char *filepath, bool save_copy, bool save_as);
std::optional<std::string> WM_web_take_export_path(std::optional<bool> *r_save_copy = nullptr,
bool *r_save_as = nullptr);
#endif
struct ARegion;
struct GPUViewport;
struct ID;
@@ -278,8 +285,12 @@ bool WM_desktop_cursor_sample_read(float r_col[3]);
uint8_t *WM_window_pixels_read_from_frontbuffer(const wmWindowManager *wm,
const wmWindow *win,
int r_size[2]);
/** A version of #WM_window_pixels_read_from_frontbuffer that samples a pixel at `pos`. */
void WM_window_pixels_read_sample_from_frontbuffer(const wmWindowManager *wm,
/** A version of #WM_window_pixels_read_from_frontbuffer that samples a pixel at `pos`.
*
* Returns false when the native front-buffer cannot be read, allowing browser callers to
* fall back to the slower off-screen compositor without publishing a false black sample.
*/
bool WM_window_pixels_read_sample_from_frontbuffer(const wmWindowManager *wm,
const wmWindow *win,
const int pos[2],
float r_col[3]);
@@ -388,6 +399,16 @@ void WM_window_set_active_screen(wmWindow *win, WorkSpace *workspace, bScreen *s
ViewLayer *WM_window_get_active_view_layer(const wmWindow *win)
ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
void WM_window_set_active_view_layer(wmWindow *win, ViewLayer *view_layer) ATTR_NONNULL(1);
#ifdef __EMSCRIPTEN__
/** Preflight the browser window family before replacing its view layer. A null
* target denotes a layer that is about to be created or removed. No mutation. */
bool WM_window_web_view_layer_change_allowed(const wmWindowManager *wm,
const wmWindow *win,
const ViewLayer *view_layer,
ReportList *reports);
/** Invalidate queued input before callbacks can consume the replacement layer. */
void WM_window_web_view_layer_changed(wmWindow *win);
#endif
void WM_window_ensure_active_view_layer(wmWindow *win) ATTR_NONNULL(1);
bool WM_window_is_temp_screen(const wmWindow *win) ATTR_WARN_UNUSED_RESULT;
@@ -506,6 +527,7 @@ bool WM_file_read(bContext *C,
const bool use_scripts_autoexec_check,
ReportList *reports);
void WM_file_autosave_init(wmWindowManager *wm);
bool WM_file_write_last_session(bContext *C, ReportList *reports);
bool WM_file_recover_last_session(bContext *C,
const bool use_scripts_autoexec_check,
ReportList *reports);
@@ -1497,6 +1519,10 @@ void WM_operator_type_modal_from_exec_for_object_edit_coords(wmOperatorType *ot)
void WM_uilisttype_init();
uiListType *WM_uilisttype_find(StringRef idname, bool quiet);
bool WM_uilisttype_add(uiListType *ult);
/**
* Clear list type references without deleting saved list settings, then remove the type.
* With WITH_WEB, `bmain` may be null only when session teardown has no surviving owner Main.
*/
void WM_uilisttype_remove_ptr(Main *bmain, uiListType *ult);
void WM_uilisttype_free();