Skip to content

Docs: list .pdf and .ai where open_file and the CLI's --in are documented - #13

Closed
storybored379 wants to merge 1 commit into
storytold:mainfrom
storybored379:pr/docs-open-pdf-ai
Closed

storybored379 wants to merge 1 commit into
storytold:mainfrom
storybored379:pr/docs-open-pdf-ai

Conversation

@storybored379

Copy link
Copy Markdown
Contributor

Follow-up to #5. Headless open_file (and with it vectorcraft-cli convert, info and run --in, which go through the same headless open) now reads .pdf and PDF-compatible .ai, but two places still listed only .vectorcraft and .svg:

  • docs/mcp.md: the open_file row.
  • vectorcraft-cli usage: the run [--in …] synopsis and the run description.

Docs and usage text only; no behaviour change. cargo check -p vectorcraft-cli passes.

The #5 description also said vectorcraft-cli already imported PDF before that change. It didn't: convert x.pdf failed on main too, and #5 fixed it along with MCP.

Found and fixed with Claude Code (AI-assisted).

🤖 Generated with Claude Code

…nted

Follow-up to storytold#5: headless open_file and vectorcraft-cli convert/info/run --in read PDF and
PDF-compatible .ai, but docs/mcp.md and the CLI usage still listed only .vectorcraft and .svg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@storybored379

Copy link
Copy Markdown
Contributor Author

Closing — main's docs now cover this (and more) after the format work. Thanks!

apexmiguel9-hub pushed a commit to apexmiguel9-hub/vectorcraft-android that referenced this pull request Oct 6, 2026
…lar shaders

MEDIDO, con la cadena de 35 frames del tombstone. Se lee de abajo arriba:

    storytold#15 egui_wgpu::Painter::set_window
    storytold#14 egui_wgpu::renderer::Renderer::new
    storytold#13 wgpu_core::...::CoreDevice::<dispatch>::DeviceInterface::create_render_pipeline
    storytold#12 wgpu_core::device::global::Global::device_create_render_pipeline
    storytold#11 wgpu_core::device::global::Global::device_create_general_render_pipeline
    storytold#10 wgpu_core::device::resource::Device::create_render_pipeline
    storytold#9 wgpu_core::device::resource::Device::create_render_pipeline_inner
    storytold#8 wgpu_hal::dynamic::device::vulkan::DynDevice::create_render_pipeline
    storytold#7 wgpu_hal::vulkan::device::Device::create_render_pipeline
    storytold#6 vulkan.mtk.so    (FragmentShaderCompileState::CompileUF()+1272)
    storytold#4 vulkan.mtk.so
    storytold#3 libufwriter.so   (BILParseStream+164)
    #00 libc.so          (abort+156)

**Los seis frames interiores no son de Rust, son del driver.** `egui_wgpu` pide su
primer pipeline, `wgpu` lo pasa a Vulkan, y `vulkan.mtk.so` aborta mientras compila
el fragment shader, dentro de `libufwriter.so` — el escritor de binarios del
compilador propietario, porque `BIL` es su IR.

## Y no es que a Vulkan le falte nada

Es lo que mas confunde, y conviene dejarlo escrito con numeros. Del perfil
`vp_gpuinfo` del Moto G56 5G (Android 16) y del informe de la base de datos de
Sascha Willems:

| | |
|---|---|
| `apiVersion` | **1.3.1023** (la base de datos lo da como 1.3.303) |
| extensiones | **129**, 61 de ellas `VK_KHR` |
| `VK_ANDROID_external_memory_android_hardware_buffer` | si |
| `driverID` | `VK_DRIVER_ID_IMAGINATION_PROPRIETARY`, PowerVR B-Series 25.1 |
| subgroup | 128, todas las operaciones |
| todas las versiones core 1.0-1.3 | soportadas |

O sea: **no falta ninguna feature, es un driver que conforms pero aborta.** Ni
siquiera hay mensaje: `PVR_ASSERT` viene compilado en release y es un `abort()` a
peloso, asi que el logcat no dice que construccion del SPIR-V le molesta. No hay
forma de averiguarlo desde aqui.

## Por que OpenGL no cuesta nada

Porque VectorCraft **rasteriza en CPU** con `vello_cpu`. La GPU solo presenta
pixeles que ya estan pintados. Toda la parte de Vulkan que de verdad importa —
compute shaders, para rasterizar en GPU— es justo la que este proyecto no usa, y lo
hizo a proposito para no depender del driver. Aqui el coste de GL es cero.

## Como queda

Una funcion, `wgpu_solo_opengl()`, que parte de
`WgpuSetupCreateNew::without_display_handle()` y cambia `instance_descriptor.backends`
a `Backends::GL`. Se escribe asi, modificando el campo, y no con sintaxis de
actualizacion de structs, porque no depende de que campos existan los que no se
nombran.

`eframe` reexporta `egui_wgpu` y `egui_wgpu::wgpu` (su `lib.rs:162`), asi que no
hacen falta dependencias nuevas.

**Queda anotado como una linea si el driver deja de abortar**, y el propio egui-wgpu
tiene ademas el interruptor `WGPU_BACKEND=opengl` para probarlo sin recompilar.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant