xbintsc 0.5.45 → 0.5.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/README.md +5 -4
- package/README.zh-CN.md +4 -3
- package/dist/src/cli/extensions.d.ts +24 -0
- package/dist/src/cli/extensions.js +62 -0
- package/dist/src/cli/extensions.js.map +1 -0
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/cli/help.js +3 -1
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hints.js +8 -3
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +21 -28
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/diagnostics/diagnostic.d.ts +3 -1
- package/dist/src/diagnostics/diagnostic.js +2 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -1
- package/dist/src/driver/build-key.d.ts +2 -0
- package/dist/src/driver/build-key.js +1 -0
- package/dist/src/driver/build-key.js.map +1 -1
- package/dist/src/driver/compiler.js +61 -8
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/config.d.ts +4 -0
- package/dist/src/driver/config.js +2 -0
- package/dist/src/driver/config.js.map +1 -1
- package/dist/src/driver/link-features.d.ts +37 -0
- package/dist/src/driver/link-features.js +123 -0
- package/dist/src/driver/link-features.js.map +1 -0
- package/dist/src/driver/options.d.ts +10 -0
- package/dist/src/driver/runtime-objects.d.ts +5 -0
- package/dist/src/driver/runtime-objects.js +20 -1
- package/dist/src/driver/runtime-objects.js.map +1 -1
- package/dist/src/driver/usage.d.ts +23 -0
- package/dist/src/driver/usage.js +353 -0
- package/dist/src/driver/usage.js.map +1 -0
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/extensions/catalog.js +1 -2
- package/dist/src/extensions/catalog.js.map +1 -1
- package/dist/src/extensions/gui/features.d.ts +34 -0
- package/dist/src/extensions/gui/features.js +165 -0
- package/dist/src/extensions/gui/features.js.map +1 -0
- package/dist/src/extensions/gui/index.js +10 -4
- package/dist/src/extensions/gui/index.js.map +1 -1
- package/dist/src/extensions/link-feature.d.ts +70 -0
- package/dist/src/extensions/link-feature.js +18 -0
- package/dist/src/extensions/link-feature.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +24 -4
- package/dist/src/extensions/registry.js +26 -3
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/tests/cli/hints.test.js +5 -7
- package/dist/tests/cli/hints.test.js.map +1 -1
- package/dist/tests/driver/link-features.test.js +105 -0
- package/dist/tests/driver/link-features.test.js.map +1 -0
- package/dist/tests/driver/usage.test.d.ts +1 -0
- package/dist/tests/driver/usage.test.js +88 -0
- package/dist/tests/driver/usage.test.js.map +1 -0
- package/dist/tests/e2e/gui-audio.test.js +4 -4
- package/dist/tests/e2e/gui-audio.test.js.map +1 -1
- package/dist/tests/e2e/gui-css-coverage.test.d.ts +9 -0
- package/dist/tests/e2e/gui-css-coverage.test.js +333 -0
- package/dist/tests/e2e/gui-css-coverage.test.js.map +1 -0
- package/dist/tests/e2e/gui-css-features.test.d.ts +6 -0
- package/dist/tests/e2e/gui-css-features.test.js +270 -0
- package/dist/tests/e2e/gui-css-features.test.js.map +1 -0
- package/dist/tests/e2e/gui-effects.test.js +92 -11
- package/dist/tests/e2e/gui-effects.test.js.map +1 -1
- package/dist/tests/e2e/gui-feature-linking.test.d.ts +9 -0
- package/dist/tests/e2e/gui-feature-linking.test.js +68 -0
- package/dist/tests/e2e/gui-feature-linking.test.js.map +1 -0
- package/dist/tests/e2e/gui-font-face.test.d.ts +10 -0
- package/dist/tests/e2e/gui-font-face.test.js +142 -0
- package/dist/tests/e2e/gui-font-face.test.js.map +1 -0
- package/dist/tests/e2e/gui-fonts.test.d.ts +10 -0
- package/dist/tests/e2e/gui-fonts.test.js +150 -0
- package/dist/tests/e2e/gui-fonts.test.js.map +1 -0
- package/dist/tests/e2e/gui-helpers.d.ts +10 -1
- package/dist/tests/e2e/gui-helpers.js +6 -0
- package/dist/tests/e2e/gui-helpers.js.map +1 -1
- package/dist/tests/e2e/gui-layout.test.js +7 -3
- package/dist/tests/e2e/gui-layout.test.js.map +1 -1
- package/dist/tests/e2e/gui-media-disabled.test.d.ts +5 -4
- package/dist/tests/e2e/gui-media-disabled.test.js +7 -6
- package/dist/tests/e2e/gui-media-disabled.test.js.map +1 -1
- package/dist/tests/e2e/gui-media.test.d.ts +5 -4
- package/dist/tests/e2e/gui-media.test.js +9 -9
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/gui-paint.test.js +5 -2
- package/dist/tests/e2e/gui-paint.test.js.map +1 -1
- package/dist/tests/e2e/gui-shaping.test.d.ts +5 -0
- package/dist/tests/e2e/gui-shaping.test.js +47 -0
- package/dist/tests/e2e/gui-shaping.test.js.map +1 -0
- package/dist/tests/e2e/gui-track-sizing.test.d.ts +6 -0
- package/dist/tests/e2e/gui-track-sizing.test.js +173 -0
- package/dist/tests/e2e/gui-track-sizing.test.js.map +1 -0
- package/dist/tests/e2e/gui-transform.test.js +3 -2
- package/dist/tests/e2e/gui-transform.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.d.ts +18 -0
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.js +120 -0
- package/dist/tests/e2e/gui-webgl-pipeline-cache.test.js.map +1 -0
- package/dist/tests/extensions/gui-features.test.d.ts +1 -0
- package/dist/tests/extensions/gui-features.test.js +175 -0
- package/dist/tests/extensions/gui-features.test.js.map +1 -0
- package/doc/ai/cli.md +5 -1
- package/doc/ai/extensions.md +56 -26
- package/doc/ai/troubleshooting.md +10 -7
- package/doc/ai/zh-CN/cli.md +5 -1
- package/doc/ai/zh-CN/extensions.md +48 -22
- package/doc/ai/zh-CN/troubleshooting.md +6 -5
- package/doc/gui/animation.md +39 -9
- package/doc/gui/api.md +2 -1
- package/doc/gui/build.md +137 -19
- package/doc/gui/canvas.md +1 -1
- package/doc/gui/dom.md +20 -4
- package/doc/gui/known-issues.md +63 -26
- package/doc/gui/layout.md +31 -8
- package/doc/gui/media.md +13 -7
- package/doc/gui/rendering.md +114 -39
- package/doc/gui/runtime.md +5 -0
- package/doc/gui/webgl.md +24 -6
- package/doc/gui.md +110 -47
- package/doc/implemented/cli.md +2 -0
- package/doc/implemented/extensions.md +9 -3
- package/doc/npm-package.md +4 -4
- package/doc/xbintsc.config.schema.json +10 -0
- package/doc/zh-CN/gui/animation.md +33 -10
- package/doc/zh-CN/gui/api.md +2 -1
- package/doc/zh-CN/gui/build.md +110 -16
- package/doc/zh-CN/gui/canvas.md +1 -1
- package/doc/zh-CN/gui/dom.md +16 -3
- package/doc/zh-CN/gui/known-issues.md +45 -15
- package/doc/zh-CN/gui/layout.md +23 -6
- package/doc/zh-CN/gui/media.md +11 -6
- package/doc/zh-CN/gui/rendering.md +84 -26
- package/doc/zh-CN/gui/runtime.md +3 -0
- package/doc/zh-CN/gui/webgl.md +3 -3
- package/doc/zh-CN/gui.md +92 -41
- package/doc/zh-CN/implemented/cli.md +2 -0
- package/doc/zh-CN/implemented/extensions.md +9 -3
- package/doc/zh-CN/npm-package.md +4 -3
- package/package.json +7 -7
- package/runtime/ext_gui/animation_values.cpp +425 -0
- package/runtime/ext_gui/animation_values.h +64 -0
- package/runtime/ext_gui/browser.cpp +22 -15
- package/runtime/ext_gui/browser_loop.cpp +13 -1
- package/runtime/ext_gui/canvas.h +1 -1
- package/runtime/ext_gui/canvas_raster.cpp +1 -1
- package/runtime/ext_gui/canvas_text.cpp +1 -1
- package/runtime/ext_gui/css.cpp +172 -21
- package/runtime/ext_gui/css.h +75 -4
- package/runtime/ext_gui/css_match.cpp +4 -0
- package/runtime/ext_gui/css_sheet.cpp +218 -2
- package/runtime/ext_gui/document.cpp +42 -192
- package/runtime/ext_gui/document.h +25 -12
- package/runtime/ext_gui/document_animation.cpp +428 -0
- package/runtime/ext_gui/dom_api_canvas.cpp +15 -8
- package/runtime/ext_gui/dom_api_canvas_extra.cpp +44 -20
- package/runtime/ext_gui/dom_api_canvas_image.cpp +3 -1
- package/runtime/ext_gui/dom_api_node_read.cpp +10 -0
- package/runtime/ext_gui/dom_api_offscreen.cpp +3 -1
- package/runtime/ext_gui/dom_api_style.cpp +7 -0
- package/runtime/ext_gui/dom_api_webgl_internal.h +4 -0
- package/runtime/ext_gui/dom_api_webgl_source.cpp +5 -2
- package/runtime/ext_gui/effect_values.cpp +245 -21
- package/runtime/ext_gui/gpu_bridge.c +28 -0
- package/runtime/ext_gui/gpu_feature.cpp +30 -0
- package/runtime/ext_gui/gpu_shader.cpp +22 -0
- package/runtime/ext_gui/gpu_shader_api.h +50 -0
- package/runtime/ext_gui/gradient_values.cpp +24 -0
- package/runtime/ext_gui/grid_values.cpp +23 -0
- package/runtime/ext_gui/gui.cpp +6 -37
- package/runtime/ext_gui/gui_canvas.cpp +14 -6
- package/runtime/ext_gui/gui_cursor.cpp +50 -0
- package/runtime/ext_gui/gui_engine.h +1 -18
- package/runtime/ext_gui/gui_events.cpp +19 -6
- package/runtime/ext_gui/gui_internal.h +3 -0
- package/runtime/ext_gui/gui_webgl.cpp +25 -10
- package/runtime/ext_gui/image_api.cpp +18 -0
- package/runtime/ext_gui/image_api.h +43 -0
- package/runtime/ext_gui/image_bitmap_browser.cpp +20 -11
- package/runtime/ext_gui/image_bridge.c +22 -0
- package/runtime/ext_gui/image_feature.cpp +107 -0
- package/runtime/ext_gui/inline_svg.cpp +95 -8
- package/runtime/ext_gui/inline_svg.h +5 -1
- package/runtime/ext_gui/layout.cpp +15 -9
- package/runtime/ext_gui/layout.h +8 -2
- package/runtime/ext_gui/layout_flex.cpp +134 -29
- package/runtime/ext_gui/layout_flow.cpp +58 -7
- package/runtime/ext_gui/layout_flow_internal.h +39 -4
- package/runtime/ext_gui/layout_grid.cpp +31 -0
- package/runtime/ext_gui/layout_inline.cpp +26 -2
- package/runtime/ext_gui/layout_vertical.cpp +196 -0
- package/runtime/ext_gui/media.cpp +4 -2
- package/runtime/ext_gui/media.h +3 -3
- package/runtime/ext_gui/media_api.h +7 -6
- package/runtime/ext_gui/paint.cpp +67 -9
- package/runtime/ext_gui/paint.h +61 -8
- package/runtime/ext_gui/paint_backdrop.cpp +211 -0
- package/runtime/ext_gui/paint_background.cpp +175 -97
- package/runtime/ext_gui/paint_effects.cpp +12 -6
- package/runtime/ext_gui/paint_internal.h +27 -0
- package/runtime/ext_gui/paint_outline.cpp +44 -0
- package/runtime/ext_gui/paint_shadow.cpp +368 -0
- package/runtime/ext_gui/renderer.cpp +15 -7
- package/runtime/ext_gui/renderer.h +11 -2
- package/runtime/ext_gui/renderer_backdrop.cpp +374 -0
- package/runtime/ext_gui/renderer_bitmap.cpp +82 -0
- package/runtime/ext_gui/renderer_gradient.cpp +51 -17
- package/runtime/ext_gui/renderer_image.cpp +19 -7
- package/runtime/ext_gui/renderer_internal.h +21 -0
- package/runtime/ext_gui/renderer_layer.cpp +37 -6
- package/runtime/ext_gui/renderer_text.cpp +2 -1
- package/runtime/ext_gui/stb_truetype.h +5077 -0
- package/runtime/ext_gui/style.cpp +62 -8
- package/runtime/ext_gui/style.h +111 -4
- package/runtime/ext_gui/style_cascade.cpp +83 -0
- package/runtime/ext_gui/style_internal.h +13 -1
- package/runtime/ext_gui/style_length.cpp +92 -0
- package/runtime/ext_gui/style_print.cpp +83 -2
- package/runtime/ext_gui/style_svg.cpp +40 -0
- package/runtime/ext_gui/style_text.cpp +302 -0
- package/runtime/ext_gui/style_ui.cpp +150 -0
- package/runtime/ext_gui/style_values.cpp +76 -62
- package/runtime/ext_gui/style_values_internal.h +23 -0
- package/runtime/ext_gui/text.cpp +27 -499
- package/runtime/ext_gui/text.h +18 -9
- package/runtime/ext_gui/text_api.h +45 -0
- package/runtime/ext_gui/text_bridge.c +23 -0
- package/runtime/ext_gui/text_cache.cpp +12 -3
- package/runtime/ext_gui/text_font_db.cpp +427 -0
- package/runtime/ext_gui/text_font_paths.cpp +250 -0
- package/runtime/ext_gui/text_font_paths.h +39 -0
- package/runtime/ext_gui/text_font_sfnt.cpp +396 -0
- package/runtime/ext_gui/text_font_sfnt.h +44 -0
- package/runtime/ext_gui/text_fonts.cpp +348 -0
- package/runtime/ext_gui/text_fonts.h +78 -0
- package/runtime/ext_gui/text_fonts_internal.h +77 -0
- package/runtime/ext_gui/text_glyph_cache.cpp +2 -2
- package/runtime/ext_gui/text_hb.cpp +438 -0
- package/runtime/ext_gui/text_stb.cpp +369 -0
- package/runtime/ext_gui/transform.cpp +107 -9
- package/runtime/ext_gui/transform.h +5 -0
- package/runtime/ext_gui/webgl_api.cpp +19 -0
- package/runtime/ext_gui/webgl_api.h +53 -0
- package/runtime/ext_gui/webgl_bridge.c +25 -0
- package/runtime/ext_gui/webgl_draw_setup.cpp +42 -1
- package/runtime/ext_gui/webgl_feature.cpp +82 -0
- package/runtime/ext_gui/webgl_feature.h +28 -0
- package/runtime/ext_gui/webgl_msl.cpp +41 -0
- package/runtime/ext_gui/webgl_msl.h +6 -0
- package/runtime/ext_gui/webgl_shader.cpp +40 -32
- package/runtime/ext_gui/window.cpp +7 -7
- package/runtime/ext_media/decode_audio.cpp +1 -1
- package/runtime/ext_media/media.cpp +1 -1
- package/runtime/ext_media/media_bridge.c +7 -7
- package/scripts/build-gui.ts +97 -98
- package/scripts/check-file-length.ts +1 -0
- package/scripts/gui-build-options.ts +122 -0
- package/src/cli/extensions.ts +72 -0
- package/src/cli/help.ts +3 -1
- package/src/cli/hints.ts +9 -3
- package/src/cli/main.ts +21 -27
- package/src/diagnostics/diagnostic.ts +2 -0
- package/src/driver/build-key.ts +3 -0
- package/src/driver/compiler.ts +63 -8
- package/src/driver/config.ts +6 -0
- package/src/driver/link-features.ts +163 -0
- package/src/driver/options.ts +10 -0
- package/src/driver/runtime-objects.ts +26 -1
- package/src/driver/usage.ts +376 -0
- package/src/driver/version.ts +1 -1
- package/src/extensions/catalog.ts +1 -2
- package/src/extensions/gui/features.ts +166 -0
- package/src/extensions/gui/index.ts +10 -4
- package/src/extensions/link-feature.ts +72 -0
- package/src/extensions/registry.ts +45 -4
- package/src/index.ts +3 -2
- package/dist/src/extensions/media/index.d.ts +0 -28
- package/dist/src/extensions/media/index.js +0 -59
- package/dist/src/extensions/media/index.js.map +0 -1
- package/dist/tests/extensions/media.test.js +0 -63
- package/dist/tests/extensions/media.test.js.map +0 -1
- package/src/extensions/media/index.ts +0 -65
- /package/dist/tests/{extensions/media.test.d.ts → driver/link-features.test.d.ts} +0 -0
|
@@ -135,6 +135,16 @@ void drawRuns(SDL_GPURenderPass *pass, const std::vector<XtGuiDrawRun> &runs, si
|
|
|
135
135
|
* SPIR-V or MSL). D3D12/DXIL has no shader compiler here, so it falls back to
|
|
136
136
|
* the ordinary single-pass painter. */
|
|
137
137
|
bool layerRendererReady(SDL_GPUDevice *device);
|
|
138
|
+
/** True when the `backdrop-filter` snapshot/filter pipeline was created. */
|
|
139
|
+
bool backdropRendererReady(SDL_GPUDevice *device);
|
|
140
|
+
/** Filter `source` into the active scene pass inside the element's rounded
|
|
141
|
+
* border box. No-op when the pipeline is unavailable. */
|
|
142
|
+
void drawBackdropPass(SDL_GPUCommandBuffer *cmd, SDL_GPURenderPass *pass,
|
|
143
|
+
SDL_GPUTexture *source, const xtgui::DisplayList &list,
|
|
144
|
+
const XtGuiDrawRun &run, int target_width, int target_height,
|
|
145
|
+
float pixel_density);
|
|
146
|
+
/** Release the backdrop pipeline and sampler. */
|
|
147
|
+
void backdropRendererDestroy(SDL_GPUDevice *device);
|
|
138
148
|
/** Render `list` through the offscreen layer compositor into `swapchain`.
|
|
139
149
|
* Returns false before recording any pass when the scene textures cannot be
|
|
140
150
|
* created, so the caller can fall back to the ordinary painter. */
|
|
@@ -159,6 +169,17 @@ SDL_GPUTexture *createImageTexture(SDL_GPUDevice *device, const xtgui::Image &im
|
|
|
159
169
|
SDL_GPUTexture *ensureImageTexture(SDL_GPUDevice *device, const std::string &src, int pixel_width,
|
|
160
170
|
int pixel_height, XtGuiUploadBatch *batch);
|
|
161
171
|
|
|
172
|
+
/* -- CPU-rasterised shadows ---------------------------------------------- */
|
|
173
|
+
|
|
174
|
+
/** Upload (once) the blurred mask of a `box-shadow`/`text-shadow` layer and
|
|
175
|
+
* return its cached texture. Bracket the frame's image upload with
|
|
176
|
+
* `beginBitmapUpload`/`finishBitmapUpload` so stale masks are reclaimed. */
|
|
177
|
+
SDL_GPUTexture *ensureBitmapTexture(SDL_GPUDevice *device, const xtgui::PaintBitmap &bitmap,
|
|
178
|
+
XtGuiUploadBatch *batch);
|
|
179
|
+
void beginBitmapUpload();
|
|
180
|
+
void finishBitmapUpload(SDL_GPUDevice *device);
|
|
181
|
+
void releaseBitmapTextures(SDL_GPUDevice *device);
|
|
182
|
+
|
|
162
183
|
/* -- background gradients ------------------------------------------------- */
|
|
163
184
|
|
|
164
185
|
/** Rasterise a `PaintImage` radial gradient into an RGBA texture and cache it by
|
|
@@ -17,14 +17,16 @@
|
|
|
17
17
|
|
|
18
18
|
#include "renderer_internal.h"
|
|
19
19
|
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
#include <cmath>
|
|
20
22
|
#include <cstdio>
|
|
21
23
|
#include <cstring>
|
|
22
24
|
#include <string>
|
|
23
25
|
#include <vector>
|
|
24
26
|
|
|
27
|
+
#include "gpu_shader_api.h"
|
|
25
28
|
#include "perf.h"
|
|
26
29
|
#include "webgl_glsl.h"
|
|
27
|
-
#include "webgl_msl.h"
|
|
28
30
|
|
|
29
31
|
namespace xtgui {
|
|
30
32
|
namespace renderer_detail {
|
|
@@ -136,6 +138,7 @@ SDL_GPUSampler *g_layer_sampler = nullptr;
|
|
|
136
138
|
SDL_GPUTextureFormat g_layer_format = SDL_GPU_TEXTUREFORMAT_INVALID;
|
|
137
139
|
bool g_layer_failed = false;
|
|
138
140
|
|
|
141
|
+
|
|
139
142
|
struct BlendParams {
|
|
140
143
|
int mode;
|
|
141
144
|
int padding[3];
|
|
@@ -154,8 +157,13 @@ void pushMode(SDL_GPUCommandBuffer *cmd, int mode) {
|
|
|
154
157
|
bool prepareStage(const std::string &source, bool fragment, SDL_GPUShaderFormat formats,
|
|
155
158
|
std::vector<uint32_t> *spirv, std::string *text, const Uint8 **code,
|
|
156
159
|
size_t *code_size, std::string *entry, std::string *log) {
|
|
160
|
+
const GpuShaderApi *api = gpu_shader_api();
|
|
161
|
+
if (api == nullptr) {
|
|
162
|
+
*log = "shader translation was not linked (the 'gpu' link feature is inactive)";
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
157
165
|
GlslShaderInfo info;
|
|
158
|
-
scan_glsl(source, fragment, &info);
|
|
166
|
+
api->scan_glsl(source, fragment, &info);
|
|
159
167
|
if (!info.unsupported.empty()) {
|
|
160
168
|
*log = info.unsupported;
|
|
161
169
|
return false;
|
|
@@ -167,11 +175,11 @@ bool prepareStage(const std::string &source, bool fragment, SDL_GPUShaderFormat
|
|
|
167
175
|
layout.samplers["u_layer"] = 1;
|
|
168
176
|
layout.block_members = info.uniforms;
|
|
169
177
|
}
|
|
170
|
-
const std::string rewritten = rewrite_glsl(source, fragment, layout, info);
|
|
171
|
-
if (!compile_glsl(rewritten, fragment, spirv, log)) return false;
|
|
178
|
+
const std::string rewritten = api->rewrite_glsl(source, fragment, layout, info);
|
|
179
|
+
if (!api->compile_glsl(rewritten, fragment, spirv, log)) return false;
|
|
172
180
|
|
|
173
181
|
if ((formats & SDL_GPU_SHADERFORMAT_MSL) != 0) {
|
|
174
|
-
if (!cross_compile_msl(*spirv, fragment, text, entry, log)) return false;
|
|
182
|
+
if (!api->cross_compile_msl(*spirv, fragment, text, entry, log)) return false;
|
|
175
183
|
*code = (const Uint8 *)text->data();
|
|
176
184
|
*code_size = text->size();
|
|
177
185
|
return true;
|
|
@@ -450,10 +458,31 @@ void renderSequence(SceneContext &context, size_t begin, size_t end, int depth,
|
|
|
450
458
|
continue;
|
|
451
459
|
}
|
|
452
460
|
if (run.pipeline == XtGuiDrawRun::LayerEnd) continue;
|
|
461
|
+
if (run.pipeline == XtGuiDrawRun::Backdrop) {
|
|
462
|
+
if (g_layer_pipeline == nullptr) continue;
|
|
463
|
+
SDL_EndGPURenderPass(pass);
|
|
464
|
+
SDL_GPUTexture *scene = sceneTexture(context.shapes, depth, context.parity[depth]);
|
|
465
|
+
SDL_GPUTexture *scratch =
|
|
466
|
+
sceneTexture(context.shapes, depth, context.parity[depth] ^ 1);
|
|
467
|
+
if (scene != nullptr && scratch != nullptr) {
|
|
468
|
+
/* Copy the scene first: a blur samples around every pixel, so it cannot
|
|
469
|
+
* read the target it is writing. */
|
|
470
|
+
compositePass(context, scratch, scene, scene, -1);
|
|
471
|
+
beginPass(context.cmd, scene, false, nullptr, &pass);
|
|
472
|
+
if (pass == nullptr) return;
|
|
473
|
+
drawBackdropPass(context.cmd, pass, scratch, *context.list, run, context.target_width,
|
|
474
|
+
context.target_height, context.pixel_density);
|
|
475
|
+
} else {
|
|
476
|
+
beginPass(context.cmd, scene, false, nullptr, &pass);
|
|
477
|
+
if (pass == nullptr) return;
|
|
478
|
+
}
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
453
481
|
|
|
454
482
|
size_t segment_end = i;
|
|
455
483
|
while (segment_end < end && runs[segment_end].pipeline != XtGuiDrawRun::LayerBegin &&
|
|
456
|
-
runs[segment_end].pipeline != XtGuiDrawRun::LayerEnd
|
|
484
|
+
runs[segment_end].pipeline != XtGuiDrawRun::LayerEnd &&
|
|
485
|
+
runs[segment_end].pipeline != XtGuiDrawRun::Backdrop) {
|
|
457
486
|
segment_end++;
|
|
458
487
|
}
|
|
459
488
|
drawRuns(pass, runs, i, segment_end, context.shapes, context.texts, context.images,
|
|
@@ -467,6 +496,7 @@ void renderSequence(SceneContext &context, size_t begin, size_t end, int depth,
|
|
|
467
496
|
|
|
468
497
|
bool layerRendererReady(SDL_GPUDevice *device) { return ensureLayerPipeline(device); }
|
|
469
498
|
|
|
499
|
+
|
|
470
500
|
bool drawLayeredScene(SDL_GPUCommandBuffer *cmd, SDL_GPUTexture *swapchain,
|
|
471
501
|
const float clear_color[4], XtGuiGeometry *shapes, XtGuiGeometry *texts,
|
|
472
502
|
XtGuiGeometry *images, const DisplayList &list, float viewport_width,
|
|
@@ -546,6 +576,7 @@ void layerRendererDestroy(SDL_GPUDevice *device) {
|
|
|
546
576
|
}
|
|
547
577
|
g_layer_format = SDL_GPU_TEXTUREFORMAT_INVALID;
|
|
548
578
|
g_layer_failed = false;
|
|
579
|
+
backdropRendererDestroy(device);
|
|
549
580
|
}
|
|
550
581
|
|
|
551
582
|
} // namespace renderer_detail
|
|
@@ -299,7 +299,8 @@ void xt_gui_text_upload(SDL_GPUDevice *device, XtGuiGeometry *geometry,
|
|
|
299
299
|
if (glyph_scale < kMinGlyphScale) glyph_scale = kMinGlyphScale;
|
|
300
300
|
if (glyph_scale > kMaxGlyphScale) glyph_scale = kMaxGlyphScale;
|
|
301
301
|
|
|
302
|
-
const xtgui::ShapedRun *shaped =
|
|
302
|
+
const xtgui::ShapedRun *shaped =
|
|
303
|
+
xtgui::xt_text_shape_cached(run.text, logical, run.font.letter_spacing);
|
|
303
304
|
if (shaped == nullptr) continue;
|
|
304
305
|
float pen_x = run.x;
|
|
305
306
|
uint32_t before = (uint32_t)verts.size();
|