Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ucitavanje tekstura na GPU

[es] :: 3D programiranje :: Ucitavanje tekstura na GPU

[ Pregleda: 2814 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nenadus
Belgrade

Član broj: 70488
Poruke: 23
*.ptt.yu.



Profil

icon Ucitavanje tekstura na GPU20.01.2007. u 15:54 - pre 209 meseci
Pozdrav svima,

Da li mi neko moze reci kako da ucitam teksturu direktno u memoriju na grafickoj kartici koristeci OpenGL i Windows API?

Trivijalno je zauzeti slobodno 'ime teksture' (glGenTextures), bind-ovati je sa 'texture object'-om (glBindTexture), podesiti neke parametre (glTexParameter - npr GL_TEXTURE_PRIORITY) i ucitati podatke (glTexImage2D). Medjutim, ovaj pristup nam ne garantuje ucitavanje na graficku kartu, vec samo u memoriju drajvera (valjda 'driver managed memory') koja je iz sistemskog ram-a. Postoji opcija da se nakon svega ovoga render-uje npr kvadrat istog formata kao i tekstura i da se na njega mapira tekstura, pa bi prilikom rendering-a tog kvadrata drajver sam ucitao teksturu u memoriju graficke karte, ali voleo bih to da izbegnem.

Nakon sto ucitam teksture na graficku kartu, attach-ovao bi ih za rucno kreiran framebuffer (kao COLOR_ATTACHMENT) i vrsio neki rendering-to-texture ili offscreen-rendering.

Pozdrav,
Nenad
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.dynamic.sbb.co.yu.



Profil

icon Re: Ucitavanje tekstura na GPU29.01.2007. u 11:51 - pre 208 meseci
Takvo ponasanje nemozes da kontrolises iz OpenGL-a. U principu, posle glTexImage2D poziva textura je smestena u video memoriju (ako moze da stane), tako da ne vidim u cemu je problem. Driver ce cuvati kopiju texture u sistemskoj memoriji (u slucaju da zatreba), a tvoju kopiju (koju si napravio pre glTexImage2D poziva) mozes slobodno da bacis.

Da bi optimalno koristio memojiu graficke, posle kreiranja GL context-a, kreiraj sve framebuffere (za render to texture), pa shadere, zatim PBO i VBO objekte, i na kraju texture. Ovaj redisled sam naveo jer se na pocetku spiska nalaze OpenGL objekti koji se najmanje menjaju.

 
Odgovor na temu

nenadus
Belgrade

Član broj: 70488
Poruke: 23
213.137.127.*



Profil

icon Re: Ucitavanje tekstura na GPU30.01.2007. u 18:40 - pre 208 meseci
Jugoslave,

Hvala na odgovoru! Izvini na mojoj zakasneloj reakciji, ...

> Takvo ponasanje ne mozes da kontrolises iz
> OpenGL-a. U principu, posle glTexImage2D
> poziva textura je smestena u video memoriju
> (ako moze da stane), tako da ne vidim u
> cemu je problem.

Samo zelim da budem 100% siguran da je tekstura u potpunosti smestena u video memoriji (uz pretpostavku da je ima dovoljno).

Tokom transfera teksture, da li se ona prvo u potpunosti prenosi u driver-managed memoriju, pa tek onda u video-memoriju, ili se direktno kopira u video-memoriju a deo u driver-managed memoriju?

Hvala puno,
Nenad
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.adsl.beotel.net.



Profil

icon Re: Ucitavanje tekstura na GPU30.01.2007. u 21:52 - pre 208 meseci
Zavrsice u video memoriji sigurno a sto se driver-managed memorije tice, to zavisi od OS-a i drivera. U slucaju Windowsa bice iskopirana i u driver-managed memoriju. Za razliku od directx-a, opengl ne obavestava app da je doslo do reseta device-a ili preuzimanja device-a od druge aplikacije, nego ce kopiju svih resursa drzati i u virtuelnoj memoriji (cak ce do koristi i swap file), pa kad ponovo dobije kontrolu, sve ce da vrati na svoje mesto. Nekima takvo ponasanje smeta a nekima odgovara. Meni odgovara :)

Ako ti je bitna brzina transfera textura, mozes koristiti PBO mehanizam (radi savrseno na NV karticama, na ATI-u jos nije optimizovano). PBO mehanizam ti omogucava da alociras blok video memorije i da dobijes pointer na nju. Posle toga mozes tu da iskopiras texturu i pozoves glTexImage2D ili glTexSubImage2D da je prebacis u texture object. Ako se koristi PBO mehanizam, onda ce transfer u texture object biti asinhron, jer ce GPU to da uradi nezavisno od procesora. To znaci da je u trenutku izvrsavanja glTexImage2D ili glTexSubImage2D CPU slobodan da radi nesto drugo. Na ovaj nacin se moze poslati do ~2GB/sec u video memoriju (ovo dosta zavisi od ploce i kartice).

Direktan pristup pixelima texture objecta nije moguc jer OpenGL ne forsira hw vendore da koriste linearni memory layout, vec je to ostavljeno da implementacija izabere najbolji moguci mem layout za texture. To znaci da neki hw mozda cuva texturu u blokovima od 256x256, dok neko drugi cuva linearno.

 
Odgovor na temu

[es] :: 3D programiranje :: Ucitavanje tekstura na GPU

[ Pregleda: 2814 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.