- 1
- 2
- 3
- 4
- 5
inline float _read_zbuf(int x, int y){
float v;
glReadPixels(x,screen.height-y+1,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&v);
return v;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+169
inline float _read_zbuf(int x, int y){
float v;
glReadPixels(x,screen.height-y+1,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&v);
return v;
}
>Для определения жизни под мышкой решил использовать изменение значений в буфере глубины, но glGetPixels уронил мне фпс на 300, и это один вызов финальной проверки, а что будет когда объекты проверятся начнут подумать страшно.
Неужели все так плохо ???
http://www.gamedev.ru/code/forum/?id=151921
Традиционно видеокарты рендерят сцену параллельно с процессором. Процессор готовит данные на несколько кадров вперёд, а видяха судорожно рисует в это время.
А тут чел один пиксель решил после рендеринга прочитать.
Проц, естественно, теперь ожидает окончания рендеринга текущего кадра, вместо того, чтобы готовит данные для следующих кадров.
И это при том, что пока видяха не предназначена для обратной пересылки данных от неё в RAM или CPU. Тк обычно ей приходится отправлять только на VGA выход и такое применение пока не предусмотрено.
Естественно, чтение из видеопамяти, CPU'шкой происходит без кеширования.
Если бы доступ процессора в видеопамять происходил кэшируемо, то нужен бы был протокол поддержки согласованности кэшей процессора с видеопамятью, а это - танцы с присиданиями, которые кушают пропускную способность шины, на которой сидит видюха, и замедляют ее доступ в видеопамять. Также если бы таковой протокол был поддержан, то данные в кэшах процессора оказались бы полезны только если "кадр" лёг по старым адресам и старые данные не были перезаписаны видюхой. В противном (и наиболее вероятном) случае - промах по кэшу и сбор latency от CPU до видеопамяти. Кэширование тут бесполезно.
А код - пример закручивания гвоздей отверткой.
что я делаю неправильно?((
И как? Разумная?