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'