OpenGL текстураларындағы Uninitialized/қорғалмаған GPU жады

(Бұл шын мәнінде gamedev сайтынан алынған кросспоста, бірақ мен сендер де, қыздар да қызықты болар деп ойладың!)

Өңдеу: Мен қабаттасқан нәрселер туралы айтып бердім. Кейбір ұйқыдан кейін glGenerateMipmaps-ге шақырудың пайдасыз екенін анықтадым, өйткені glTexImage2D-ге көрсеткіш ретінде нөлді қолданамын.

OpenGL 3.3, Ubuntu 11.04, nVidia драйверлері 280.13, GeForce GT240.

Мен кейінге қалдырылған шейдер жасап жатырмын және G-буферімді экранның төменгі бөлігіндегі кіші қабаттыларға көрсетуді қалайды. Бұл жағдайда қабаттасулар z-тестілеуді, текстуралы экранды тегістелген квадтарды білдіретін және соңғы көрсетілетін мәндерді білдіреді.

G-буферлері (FBO текстурасы) толық терезеде көрсету кезінде (бір уақытта бір) дұрыс көрсетіледі. Бұл қабаттасуларды көрсету кезінде қоқыс тастайды (көрінбейтін кездейсоқ GPU-жад статикалық кедергі ретінде көрінеді, бірақ жүгірістер арасындағы айырмашылық, кейде таза сурет).

Егер мен басқа текстураны жасасам, файлдан айтыңыз, ол коды толығымен қоқыссыз көрсетіледі, сондықтан код дұрыс болуы керек. Неліктен түсіндіре аламыз? G-буфердегі текстуралар үшін glGenerateMipmap қолданды.

I know this might be not enough information, but starts with this. Please ask about any relevant information. Can the problem be related to FBO-rendering and mipmapping? Surely my code wants to show unreserved/uninitialized memory, but I don't know why. The four textures below have trash data in them.


Толық терезенің жасыл суреті - бұл G-буферінің майына байланысты GPU жадын сақтау үшін жарықтандыру сатысынан ағымдағы нәтиже (256 * 256). Сондай-ақ, материалдық шейдерде (G-буферін генерациялау) мен «out vec4 fragment [3]» -ді қолданамын және текстуралар әртүрлі ішкі форматтарда. Бұл мәселе бола ма?

PS. Шамдар (-30,0,0) және (30,0,0) шамасында, бірақ жақынырақ көрінеді. Бұл нақты мәселе бола алады ма? Мен GL_RGBA16F қалыпты, GL_RGBA32F позициялар үшін, GL_DEPTH_COMPONENT24 үшін тереңдікте және GL_RGBA үшін albedo үшін пайдаланады (Иә, үлкен қалдықтар, бірақ кейінірек оңтайландырамын).

0
«Кішкентай қабырғаларға түсіргенде мен қоқыс шығарамын»: «кішкентай қабырғалар» деген не?
қосылды автор Nicol Bolas, көзі
Кодтың толық жетіспеушілігін ескере отырып, кез-келген нәрсе болуы мүмкін.
қосылды автор genpfault, көзі

1 жауаптар

OK, I found the problem. I generated mipmaps before any meaningful data was in the memory. Turning off mipmapping for the relevant textures solved the problem. Thank you anyway for your attention! enter image description here

1
қосылды