Hi,
I'm investigating the possibility of creating a Construct 3 addon for **GPU-compressed textures**, using formats such as KTX2 / Basis Universal and GPU formats like BC, ETC2 and ASTC.
The goal would be to reduce GPU memory usage for texture-heavy 2D games.
For example, a 4096×4096 RGBA8 texture normally requires about:
**64 MiB VRAM**
Whereas the same texture could require approximately:
- BC7: ~16 MiB
- ETC2 RGBA: ~16 MiB
- ASTC 4×4: ~16 MiB
- ASTC 6×6: ~7.1 MiB
- ASTC 8×8: ~4 MiB
The ideal implementation would allow compressed textures to be used with normal Construct rendering and batching.
In particular, I would eventually like to support:
- Sprite
- Sprite animations / frames
- Tiled Background
- 9-patch
- Tilemap / tilesets
My main question is about the current Addon SDK / renderer API.
**Is there currently a supported way for an addon to create/upload a native GPU-compressed texture and expose it as an `ITexture` usable by Construct's renderer?**
For example, something conceptually equivalent to uploading BC / ETC2 / ASTC compressed texture data rather than creating a texture from an `HTMLImageElement`, `ImageBitmap`, canvas, etc.
Ideally the addon would:
KTX2/Basis file
→ detect GPU capabilities
→ transcode to BC / ETC2 / ASTC
→ upload compressed blocks directly to the GPU
→ obtain an `ITexture`
→ use normal Construct rendering/batching
A second question:
**Can an addon provide/replace the underlying texture used by built-in objects such as Sprite, Tiled Background, 9-patch or Tilemap?**
Or are their internal textures intentionally inaccessible to addons?
If replacing native textures is not supported, another possibility would be implementing custom objects such as `CompressedSprite`, `Compressed9Patch`, etc. However, this would duplicate functionality already present in Construct.
It would therefore be useful to know whether the renderer abstraction could eventually expose something along the lines of:
`CreateCompressedTexture(...)`
with implementations for both WebGL and WebGPU.
The objective isn't primarily reducing download size — WebP/AVIF already help with that — but reducing **actual GPU texture memory and memory bandwidth**, while keeping textures compressed on the GPU.
Would this be possible with the current Addon SDK, or would it require a new renderer API from Construct?
Thanks!