Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Asking the bitmap loader for uncompressed pixels does not get them from a DXT file

Aperta
#7,887 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
game-dev

Direzione di ricerca

Start with bm_lock_dds in bmpman.cpp and compare its flags handling with conversion_needed in ddsutils.cpp, the existing DXT decode decision. The issue identifies the EFF stream as the only caller requesting uncompressed pixels; trace that caller and the skip described in #7886. Done when a DXT lock requesting uncompressed pixels returns plain 32-bit pixels while callers accepting any texture remain unchanged.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

When code locks a bitmap it tells the loader what kind of texture it can accept. Most of the engine says "anything". Code that has to read the pixels itself says "uncompressed only". The DDS loader does not act on that: it hands back a DXT file as compressed blocks no matter what was asked, and the only time it decodes one is when the graphics card has no DXT support at all. On any normal GPU, code that asked for plain pixels gets compressed blocks anyway. The spot is bm_lock_dds in bmpman.cpp, which ignores its flags argument.

Where it shows

#7886 makes EFF streaming animations copy each frame into their own buffer. A frame that arrives compressed cannot be copied, so the stream skips it and logs a line, and a DXT-framed EFF plays as nothing on a real GPU. Before #7886 such a stream showed its first frame and then froze on it, so neither version ever played it. None of the mods installed here stream a DXT EFF, so this is a gap rather than something players hit today, but it is the one case #7886 leaves behind.

Expected

Locking a DXT file with the "uncompressed only" request should return plain 32-bit pixels, using the decoder the engine already has for cards without DXT support.

Fix direction

In bm_lock_dds, when the caller accepts only uncompressed textures and the file is DXT, take the existing decode path and mark the result as uncompressed. The EFF stream's skip can then go. The stream is the only caller that asks for uncompressed only; the renderer asks for anything and would not change.

Further reading

#7886 (the stream change and the skip), #7885 (the related reload guard), conversion_needed in ddsutils.cpp (the existing decode decision).

Lingua principale
C++
Stelle
488
Fork
184
Merge medio
2g 9h
PR unite (30g)
40

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di scp-fs2open/fs2open.github.com

Tutte le issue di scp-fs2open/fs2open.github.com

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.