HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- GLSL Shader проблемка. (https://hlfx.ru/forum/showthread.php?threadid=3827)
Отправлено pRoxxx 25-02-2013 в 19:32:
 GLSL Shader проблемка.
Вообщем делаю нормал мап шейдер, естесвенно шойдер должен обрабатывать несколько лайтов сразу, так вот если жеж я передаю количество лайтов как:
C++ Source Code:
| 3 | for(int i = 0;i < numlight;i++) | 
 
То вот этот цикл начинает садить так прилично ФПС. Если задавать константное значение например
C++ Source Code:
или
C++ Source Code:
| for(int i = 0;i < gl_MaxLights;i++) | 
 
То с фпс всё в порядке. О_о Чем собственно это вызвано?  Тестировал на двух карточках (Intel интегрированой, ATI HD6310).
Отправлено Дядя Миша 25-02-2013 в 20:22:
 
Циклы для параллельной архитектуры крайне нежелательны. Делай loop unrolling.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 26-02-2013 в 03:14:
 
Новые видеокарты поддерживают циклы.
Можно я поиграю в автора тринити?
"Выброси свои видеокарты в помойку и попроси маму с папой купить тебе нормальную!" 
__________________
Отправлено HAWK0044 26-02-2013 в 06:44:
 
Можно еще для профилактики скомпилить в ARB шейдер 
Отправлено XaeroX 26-02-2013 в 07:12:
 
HAWK0044 
Ну очевидно же, что не скомпилится. Или ты троллишь?
__________________
Отправлено pRoxxx 26-02-2013 в 09:32:
 
Цитата:
XaeroX писал:
Новые видеокарты поддерживают циклы.
Можно я поиграю в автора тринити?
"Выброси свои видеокарты в помойку и попроси маму с папой купить тебе нормальную!" 
Циклы поддерживает и первая и вторая карта. На первой ГЛ 3.0, на АТИ ГЛ 4.1.
Отправлено XaeroX 26-02-2013 в 09:40:
 
pRoxxx 
Раз поддерживают - то и фпс не падает. Не парь нам мозги.
__________________
Отправлено pRoxxx 26-02-2013 в 10:11:
 
Цитата:
XaeroX писал:
Раз поддерживают - то и фпс не падает. Не парь нам мозги.
Если бы не поддерживало, то шейдер бы вашпе не работал.
Отправлено XaeroX 26-02-2013 в 10:18:
 
А как тогда работают вершинные программы на GeForce 256 (том-самом, 1999 года выпуска), если тогда шейдеров и в помине не было? Ты слышал про такое слово - "эмуляция"? 
Добавлено 26-02-2013 в 17:18:
Цитата:
pRoxxx писал:
Intel интегрированой, ATI HD6310
Обе карточки, кстати, ноутбучные и кастрированные.
Ты проверь на нормальной турбине, занимающей два слота в системнике. Если и на ней фпс просядет - значит, дело не в цикле вовсе.__________________
Отправлено pRoxxx 26-02-2013 в 14:57:
 
Вообщем решение нашлось.
C++ Source Code:
| varying vec3 lightDir[8]; | 
 
нада почему то весь массив задействовать в Фрагментном шейдере, если не использовать падает ФПС.
Так всё в порядке:
C++ Source Code:
| 1 | for(int i = 0;i < gl_MaxLights;i++) | 
| 3 |   bool lightEnabled = (gl_LightSource[i].diffuse.w != 0.0); | 
| 5 |   l = normalize(lightDir[i]); | 
| 6 |   nDotL = max(0.0, dot(nm, l)); | 
| 10 |     final_color += color * nDotL; | 
 
Если сделать воть так:
C++ Source Code:
| 1 | for(int i = 0;i < gl_MaxLights;i++) | 
| 3 |   bool lightEnabled = (gl_LightSource[i].diffuse.w != 0.0); | 
| 6 |     l = normalize(lightDir[i]); | 
| 7 |     nDotL = max(0.0, dot(nm, l)); | 
| 8 |     final_color += color * nDotL; | 
 
то будет падать фпс, чертовщина ей богу.
Отправлено Дядя Миша 26-02-2013 в 16:05:
 
Циклы, условия крайне нежелательны для параллельной архитектуры.
Если там новые карточки чего-то поддерживают, то на старых фпс так и будет падать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'