Levelup
Июнь 30, 2011 14:35:51
Всем доброго времени суток!
С в 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)
Андрей Светлов
Июнь 30, 2011 20:10:10
Простите, еще раз…
Вы утверждаете, что шейдер перекомпилируется при изменении uniform параметров?
Зачем они тогда по вашему нужны — ведь можно было бы обойтисть простыми константами.
Levelup
Июнь 30, 2011 20:54:13
Я предположил..Разве не происходит компиляции при каждом смене кадра, если шейдеры находятся в OnPaint?
Андрей Светлов
Июнь 30, 2011 22:29:25
Ааа. Тогда да. Скомпилируйте шейдеры один раз при первой отрисовке и потом только меняйте uniform parameters перед вызовами.
Levelup
Июль 1, 2011 12:40:22
Но ведь uniform'ы я посылаю в сам шейдер, соответственно, при каждом изменении uniform'a шейдер компилируется заново. Или я что-то не так понимаю?
Андрей Светлов
Июль 1, 2011 12:51:54
Шейдер компилируется. На вход получает параметры, меняющиеся от вызова к вызову (координаты вертекса, например) и uniform, задаваемые программистом на весь проход. Они специально были изобретены чтобы ничего не надо было перекомпилировать.
Задаете свои uniform перед отрисовкой, и всё.
Levelup
Июль 1, 2011 13:29:07
Спасибо за информацию, сделал, как надо. Изначально я столкнулся с проблемой утечки памяти, предполагал, что это из-за всего вышесказанного, но, к сожалению, это не помогло. Не подскажете, куда копать?
Андрей Светлов
Июль 1, 2011 14:00:29
Levelup
Июль 5, 2011 20:30:46
Всё получилось! Спасибо огромное за помощь! Тема закрыта