Войти
ПрограммированиеФорумГрафика

Передача структуры в шейдер. (2 стр)

Страницы: 1 2
#15
17:40, 6 июня 2010

SNVampyre
Проверял? Есть буст? Я думаю дрова всё равно загоняют пачками юниформы...


#16
19:30, 6 июня 2010

Executor
> Проверял? Есть буст?
Да, есть немного.

#17
21:43, 6 июня 2010

Executor
> Проверял? Есть буст? Я думаю дрова всё равно загоняют пачками юниформы...
там вроде как и кеширование есть

#18
22:49, 6 июня 2010

innuendo
> там вроде как и кеширование есть
У NVidia оно работает через раз, так что заливать по новой обязательно.

#19
4:52, 7 июня 2010

SNVampyre
> У NVidia оно работает через раз, так что заливать по новой обязательно.

Не знаю насчёт через раз, сколько юзал никогда проблем не было... Многие юниформы заливал при создании шейдера...

#20
5:39, 7 июня 2010

При создании шейдера можно задать семплеры только.

#21
7:23, 7 июня 2010

Executor
> Не знаю насчёт через раз, сколько юзал никогда проблем не было...
вот и я про тоже

#22
14:44, 7 июня 2010

А зачем размер 8 делать, а использовать только 7?
И вообще как этим пользоваться?)

#23
19:14, 7 июня 2010

Не знаю насколько это криво, но вот до чего додумался, это работает:

char * szString = new char[3];
string nach="light[",s[4];

glUseProgramObjectARB(progO);

GLuint loc_lightpos,loc_lightcol,loc_lightrad,loc_lightsila;
for(int it=0;it<8;it++) {
itoa(it,szString,2);
  
s[0]=nach+szString+"].pos";
s[1]=nach+szString+"].col";
s[2]=nach+szString+"].rad";
s[3]=nach+szString+"].sila";
loc_lightpos = glGetUniformLocationARB(progO,s[0].c_str());
loc_lightcol = glGetUniformLocationARB(progO,s[1].c_str());
loc_lightrad = glGetUniformLocationARB(progO,s[2].c_str());
loc_lightsila = glGetUniformLocationARB(progO,s[3].c_str());

glUniform3fv(loc_lightpos,1,(GLfloat *)&li[it].pos);
glUniform3fv(loc_lightcol,1,(GLfloat *)&li[it].col);
glUniform1fv(loc_lightrad,1,(GLfloat *)&li[it].rad);
glUniform1fv(loc_lightsila,1,(GLfloat *)&li[it].sila);
}

delete szString; 

#24
19:47, 7 июня 2010

Beginner
> А зачем размер 8 делать, а использовать только 7?
В восьмом векторе позиция камеры :)

> И вообще как этим пользоваться?)
Ну вот например вершинный шейдер:

in vec4 a_vertex;
in vec3 a_normal;
in vec4 a_tex0;

uniform  vec4 u_matrix[8];
#define projection mat4 (u_matrix[0], u_matrix[1], u_matrix[2], u_matrix[3])
#define modelView mat3x4 (u_matrix[4], u_matrix[5], u_matrix[6])
#define normalView mat3 (u_matrix[4].xyz, u_matrix[5].xyz, u_matrix[6].xyz)

out vec3 v_look, v_world, v_normal;
out vec4 texCoord;

void main ( void ) 
{
v_world = vec4 (a_vertex.xyz, 1.0) * modelView;
gl_Position = projection * vec4 (v_world, 1.0);
v_look = u_matrix[7].xyz - v_world;
v_normal = a_normal * normalView;
texCoord = a_tex0;
}
Всё в world space.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.