Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2011 14:35:51

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация шейдеров в wx

Всем доброго времени суток!

С в wx.glcanvas'e отображаю текстуру с помощью шейдеров. Таким образом, при изменении значения uniform'a scale, шейдер компилируется заново, то есть вообще при любом refresh'e происходит компиляция. Подскажите, пожалуйста, возможно ли каким-нибудь образом оптимизировать работу программы.

def OnPaint(self, event):

VERTEX_SHADER = compileShader(“”"
uniform float scale;

void main() {
gl_TexCoord = (gl_Vertex*0.5+0.5)/(1+scale);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}“”“, GL_VERTEX_SHADER)
FRAGMENT_SHADER = compileShader(”“”
uniform sampler2D color;
void main() {

vec3 tcolor = texture2D(color, gl_TexCoord.st).xyz;
gl_FragColor = vec4(tcolor, 1.0);
}
}“”", GL_FRAGMENT_SHADER)

self.shader = compileProgram(VERTEX_SHADER,FRAGMENT_SHADER)



Офлайн

#2 Июнь 30, 2011 20:10:10

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Оптимизация шейдеров в wx

Простите, еще раз…
Вы утверждаете, что шейдер перекомпилируется при изменении uniform параметров?
Зачем они тогда по вашему нужны — ведь можно было бы обойтисть простыми константами.



Офлайн

#3 Июнь 30, 2011 20:54:13

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация шейдеров в wx

Я предположил..Разве не происходит компиляции при каждом смене кадра, если шейдеры находятся в OnPaint?



Офлайн

#4 Июнь 30, 2011 22:29:25

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Оптимизация шейдеров в wx

Ааа. Тогда да. Скомпилируйте шейдеры один раз при первой отрисовке и потом только меняйте uniform parameters перед вызовами.



Офлайн

#5 Июль 1, 2011 12:40:22

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация шейдеров в wx

Но ведь uniform'ы я посылаю в сам шейдер, соответственно, при каждом изменении uniform'a шейдер компилируется заново. Или я что-то не так понимаю?



Офлайн

#6 Июль 1, 2011 12:51:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Оптимизация шейдеров в wx

Шейдер компилируется. На вход получает параметры, меняющиеся от вызова к вызову (координаты вертекса, например) и uniform, задаваемые программистом на весь проход. Они специально были изобретены чтобы ничего не надо было перекомпилировать.
Задаете свои uniform перед отрисовкой, и всё.



Офлайн

#7 Июль 1, 2011 13:29:07

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация шейдеров в wx

Спасибо за информацию, сделал, как надо. Изначально я столкнулся с проблемой утечки памяти, предполагал, что это из-за всего вышесказанного, но, к сожалению, это не помогло. Не подскажете, куда копать?



Офлайн

#8 Июль 1, 2011 14:00:29

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Оптимизация шейдеров в wx

Офлайн

#9 Июль 5, 2011 20:30:46

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация шейдеров в wx

Всё получилось! Спасибо огромное за помощь! Тема закрыта



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version