HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

  • sdani: Sajnos nekem is hasonló érzéseim vannak az R kiszorulásával kapcsolatban. Remélem jobban fogja tar... (2024.04.29. 10:48) R meetup
  • sdani: Nagyon jók ezek a bejegyzések! Feszültséggel teli, fordulatos, mint egy jobb krimi. :D Abba ne hag... (2024.04.29. 10:35) Wgel CTF
  • sdani: @Travis.CG: Egy kis szerencse sosem árt. :D (2024.03.01. 13:19) A bioinformatika helyzete 2024-ben
  • Travis.CG: Szóval az akadémiai szféra mazochistává tett, amit a Pinephone-al élek ki? Hmm, érdekes összefüggé... (2023.10.05. 18:23) Új barátom az Informatikai titkárságról
  • Travis.CG: Túl nagy a hype körülötte, ezért túlzó elvárások vannak vele szembe. Ha a korábbi chatbotokhoz kép... (2023.02.28. 06:28) chatGPT, a bioinformatikus

Textúrák és a bájt határ esete

2021.11.15. 22:38 Travis.CG

A demó motoromat, ami technikailag egy API, új tulajdonsággal vérteztem fel. Immár képes JPEG fájlokat is használni textúrának. A libJPEGTurbót használtam, mert elég egyszerűnek tűnt a használata, és az Ubuntunak része a könyvtár.

Első használat alkalmával meglepődtem, hogy a kép fejjel lefelé jelent meg, de ezzel nem törődtem sokat. Képet forgatni a világon a legegyszerűbb. Csupán örültem, hogy a kód működik. El is kezdtem készíteni egy demót Experience-re. Szépen haladtam, amikor az egyik textúra betöltésénél core dump-olt a program.

Rögtön észrevettem, mi a baj. Szürke árnyalatos volt a kép, miközben a kód RGB-t várt. A homlokom akkor szaladt csak igazán ráncba, amikor kiderült, hogy a kép RGB verziója is elszáll. Ráadásul a hiába kerestem a hibát, a backtrace szerint a hiba a videó driverben egyik moduljára mutatott, amihez már nem értem gdb-vel. Az én kódomban a glTexImage2D volt az utolsó utasítás.

Nem értettem, hogy két kép közül, amelyek csak a dimenzióban térnek el, az egyik miért működik, miközben a másik lefagy. Elkezdtem különböző méretű textúrákat gyártani, de azok is fagytak. Átkonvertáltam PNG-be, akkor működött.

Ráadásul volt egy nagyon furcsa jelenség is. A "hibás" képpel nem minden esetben szállt el a program. Ritka esetben betöltődött, de el volt csúszva, mintha a kép pixeleit egy kisebb szélességű helyre akarnám betölteni, amitől a következő sor jobbra mozdul. Egy eredetileg függőleges vonal a képen átlóssá vált.

Úgy tűnt, a kép több helyet foglal a memóriában, mint amennyit én allokáltam. Ezzel csak az volt a baj, hogy az összes fellelhető példaprogram szerint mindent megfelelő módon csináltam. Illetve mégsem egészen. Kiderült, van egy paraméter, amivel úgy is be lehet olvasni a JPEG-et, hogy ne legyen fejjel lefelé.

Végül kiderült a turpisság. A kép szélességének 4-el osztható bájtnak kell lennie, különben a glTexImage2D elhasalhat. A PNG-nél nem volt gond, mert ott mindig 4-el osztható volt a szélesség, mert a PNG-ben RGBA-ban tároltam a kép információt. A megoldás csupán annyi, hogy meghívjuk a glPixelStorei-t, és elmagyarázzuk a drivernek, hogy ettől legyen szíves eltekinteni.

Szólj hozzá!

Címkék: programozás demoscene opengl

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr5916756320

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása