mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 12:18:30 +09:00
Final audit round over the DirectGLES scratch/shadow mechanisms; three verified defects fixed: - ~ScopedEmulationDrawState restored the APPLICATION's per-buffer colour masks, not what SyncRenderState actually pushed: a widened attachment's alpha-off doctoring (g_syncedColorMaskAlphaWidenMask) was dropped while the memo still claimed it applied, so the next sync early-outed and draws wrote fragment alpha into the widened buffer - breaking the stored-alpha==1.0 invariant the widen discipline exists to protect. The restore now re-applies the doctoring. - The same restore loop gated on the core glColorMaski name only, while the sync push falls back to glColorMaskiEXT/OES: EXT/OES-only devices were left holding buffer 0's mask broadcast across every draw buffer with the shadow recording the divergent set (never repaired). The restore now uses the same three-way pointer fallback. - ResolveThenBlit ran its resolve-into-scratch staging blit under the application's scissor: a box not covering the scratch-origin rect clipped the resolve silently (no GL error), and the second blit then copied stale scratch renderbuffer texels into the destination. The staging blit now runs scissor-off (shadow-tracked, like ScopedScissorDisable); the caller-visible blit keeps its native scissor semantics.