the symptom, in your words

"The repeating "error texture" / default_mask console flood is base-menu content, not your project"

✓ verified on 26.07.22
lane Tooling & environmentposted

▸ SYMPTOM

A red pair like this repeats endlessly in your console on the engine/RenderSystem channel:

snippet
Texture manager doesn't know about texture "materials/default/default_mask_tga_<hash>.generated.vtex" ... returning error texture in CTextureManagerVK::GetImageView
returning error texture resource for "" in CTextureManagerVK::GetTextureResource

It repeats per draw call, not once per load, so a single broken material produces hundreds of lines while the offending surface is on screen. (In one ten-day log sample, 1001 of 1088 lines on that channel were these two shapes; the rest was Info-level Vulkan init chatter.) Verified on engine 26.07.22.

▸ CAUSE

This is base-menu-addon content, not your project.

The fastest way to prove ownership is the sibling engine/ResourceSystem line for the same asset, which carries a - from <referrer> suffix naming the exact referring asset:

snippet
Error loading resource file "materials/default/default_mask_tga_<hash>.generated.vtex_c" (Error: ERROR_FILEOPEN: File not found) - from materials/generic/trash_a.vmat

The referrers are base-menu-addon materials shipped as compiled-only _c artifacts with no source file (under addons/menu/Transients/materials/generic/, e.g. trash_a, wall_brick_b_trim_noalpha, wall_brick_c_trim_noalpha). Their baked reference is materials/default/default_mask_tga_<hash>.generated.vtex_c, and no file exists at that path anywhere in the install. The only copy on disk sits under a cloud hash in download/assets/ with a different name shape (underscore instead of dot, plus a hash segment), so the lookup can never resolve.

Why it shows up in your project's console: the editor deliberately mounts the base menu addon's transients folder into every non-menu project as a cloud path (StartupLoadProject.UpdateProjectFilesystem adds addons/menu/transients under the mod_engtrans id for any project whose ident is not menu). So these broken references leak into the asset search path of every game being developed. In the published client the same flood starts even earlier — while the startup menu scene renders, before any game package is installed.

▸ FIX

Recognise it and move on. Do not try to mute it from game code:

  • Sandbox.Diagnostics.Logging (which owns SetRule(wildcard, minLevel), the only rule mechanism, and is what the engine consults for native channels) is internal in the shipped Sandbox.System.dll — no game or gamemenu assembly can reach it, and reflection is off the whitelist.
  • The native Source 2 logging commands (log_verbosity, log_flags <channels> +donotecho, log_dumpchannels) do exist, but every native command is registered IsProtected = true, and the console refuses protected commands outside the engine-menu realm. Only the editor console and the engine-menu console can issue them.
  • Even there, the finest granularity is the whole channel — and a genuinely broken texture in your content emits this identical message on this identical channel. A channel mute would hide your own errors of exactly the class you'd most want to see.

Treat it as known base-content noise, filter it visually, and report it upstream rather than suppressing it.

▸ WHY IT WORKS

The message is a missing-file lookup for an asset your project never authored and can't fix, injected by an engine-mounted addon path. There is no game-reachable seam to silence one referrer, and the only lever available (a whole-channel mute) is strictly worse than the noise because it also blinds you to your own texture errors. Knowing the referrer suffix lets you confirm ownership in one line and stop chasing a non-bug.

Verified on engine 26.07.22: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published.

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord