After loading a level, open Edit → Textures to launch the Texture Editor. It browses and edits the level's texture package under RENDERABLE (e.g. LEVEL_TEXTURES.ALL.PAK / LEVEL_TEXTURE_HEADERS.ALL.BIN).
Global textures used to sit in a separate, read-only source. They are now imported into the level automatically when it loads, which makes each level completely self-contained and means the textures it shares with the rest of the game can be edited like any other. There's no longer a source to switch between — everything the level uses is in one list.
The same window can open as a picker (with Select This Texture) from the Material Editor (Pick Texture… / Edit Texture…). Materials assigned this way show up on models in the Model Editor when textured preview is enabled.
The left tree lists the level's textures. Use Search to filter by name. The preview title shows the texture name and format (for example MyTexture [DXT5]), and the Metadata panel gives width, height, depth, mips and size for whatever is on screen.
Under each preview is a mip level slider. A texture is stored as a chain of progressively smaller copies, and the top one tells you least about how it was authored — step down the chain to see what the game actually shows at distance, and to check that a texture you imported built a sensible chain.
A texture has two slots, shown as the Streamed and Persistent preview tabs. Empty slots show (none) and disable their tab.
In the shipped data the persistent copy is never a separately compressed image — it's the streamed chain starting a few levels in. OpenCAGE reproduces that exactly when it writes one, so an imported texture is stored the way the game stores its own. Earlier versions wrote the same full-resolution data into both slots, which was wrong; persistent copies are now correctly smaller.
Cubemaps can be viewed either as 2D faces — the six faces laid out flat — or in 3D, as an interactive sphere. When a cubemap has both slots filled, the Source dropdown beside the 3D view picks which of the two the sphere is built from.
Import no longer requires a DDS in exactly the right format. OpenCAGE reads DDS, PNG, JPEG, TGA, BMP, TIFF, Radiance HDR and ASTC, and converts to whichever of the game's formats you pick.
Two encoders do the work, both carried inside OpenCAGE and unpacked when first needed — Microsoft's texconv for the block and uncompressed formats the PC game uses, and Arm's astcenc for ASTC. A DDS that's already in the format you asked for is passed straight through without running either, which is the common case when you export from a texture tool.
ASTC is offered on mobile builds only. Nothing in the PC data uses it, and offering it elsewhere would just be a way to make a texture the game can't load. See Multiple Game Installs for working with the iOS / Android / Switch ports.
Either way, an options dialog asks what to do with the image before anything is written:
ASTC textures export through the same route, so a mobile build's textures come out as ordinary images rather than as something only the game can read.
State flags and Usage flags checkboxes update live in memory (for example cube map, volume, post processing, lens flare). Usage options are power-of-two style flags from the game's texture usage enum.
The Texture Editor has no separate Save button. Persist level texture changes with File → Save Level (Ctrl+S), which writes LEVEL_TEXTURES.ALL.PAK / LEVEL_TEXTURE_HEADERS.ALL.BIN (or the compressed .PAK.FZIP variant) under the level's RENDERABLE folder.
Saving closes the game if it's running so install files aren't locked. Because global textures are imported into the level on load, edits to them are written into the level's own package — the game's global texture pak isn't modified, and the change applies to the level you're editing rather than to every level at once.