HLFX.Ru Forum
Показать все 11 сообщений этой темы на одной странице

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:
1
uniform int numlight;
2
...
3
for(int i = 0;i < numlight;i++)
4
{
5
 


То вот этот цикл начинает садить так прилично ФПС. Если задавать константное значение например
C++ Source Code:
for(int i = 0;i < 8;i++)
{

или
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:

Новые видеокарты поддерживают циклы.
Можно я поиграю в автора тринити?
"Выброси свои видеокарты в помойку и попроси маму с папой купить тебе нормальную!"

__________________

xaerox on Vivino


Отправлено HAWK0044 26-02-2013 в 06:44:

Можно еще для профилактики скомпилить в ARB шейдер


Отправлено XaeroX 26-02-2013 в 07:12:

HAWK0044
Ну очевидно же, что не скомпилится. Или ты троллишь?

__________________

xaerox on Vivino


Отправлено pRoxxx 26-02-2013 в 09:32:

Цитата:
XaeroX писал:
Новые видеокарты поддерживают циклы.
Можно я поиграю в автора тринити?
"Выброси свои видеокарты в помойку и попроси маму с папой купить тебе нормальную!"

Циклы поддерживает и первая и вторая карта. На первой ГЛ 3.0, на АТИ ГЛ 4.1.


Отправлено XaeroX 26-02-2013 в 09:40:

pRoxxx
Раз поддерживают - то и фпс не падает. Не парь нам мозги.

__________________

xaerox on Vivino


Отправлено 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

Обе карточки, кстати, ноутбучные и кастрированные.
Ты проверь на нормальной турбине, занимающей два слота в системнике. Если и на ней фпс просядет - значит, дело не в цикле вовсе.

__________________

xaerox on Vivino


Отправлено 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++)
2
{
3
  bool lightEnabled = (gl_LightSource[i].diffuse.w != 0.0);
4
 
5
  l = normalize(lightDir[i]);
6
  nDotL = max(0.0, dot(nm, l));
7
  if(lightEnabled)
8
  {
9
 
10
    final_color += color * nDotL;
11
  }
12
}

Если сделать воть так:
C++ Source Code:
1
for(int i = 0;i < gl_MaxLights;i++)
2
{
3
  bool lightEnabled = (gl_LightSource[i].diffuse.w != 0.0);
4
  if(lightEnabled)
5
  {
6
    l = normalize(lightDir[i]);
7
    nDotL = max(0.0, dot(nm, l));
8
    final_color += color * nDotL;
9
  }
10
 
11
}

то будет падать фпс, чертовщина ей богу.


Отправлено Дядя Миша 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'


Временная зона GMT. Текущее время 08:54.
Показать все 11 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024