Найти - Пользователи
Полная версия: Оптимизация шейдеров в wx
Начало » GUI » Оптимизация шейдеров в wx
1
Levelup
Всем доброго времени суток!

С в 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)
Андрей Светлов
Простите, еще раз…
Вы утверждаете, что шейдер перекомпилируется при изменении uniform параметров?
Зачем они тогда по вашему нужны — ведь можно было бы обойтисть простыми константами.
Levelup
Я предположил..Разве не происходит компиляции при каждом смене кадра, если шейдеры находятся в OnPaint?
Андрей Светлов
Ааа. Тогда да. Скомпилируйте шейдеры один раз при первой отрисовке и потом только меняйте uniform parameters перед вызовами.
Levelup
Но ведь uniform'ы я посылаю в сам шейдер, соответственно, при каждом изменении uniform'a шейдер компилируется заново. Или я что-то не так понимаю?
Андрей Светлов
Шейдер компилируется. На вход получает параметры, меняющиеся от вызова к вызову (координаты вертекса, например) и uniform, задаваемые программистом на весь проход. Они специально были изобретены чтобы ничего не надо было перекомпилировать.
Задаете свои uniform перед отрисовкой, и всё.
Levelup
Спасибо за информацию, сделал, как надо. Изначально я столкнулся с проблемой утечки памяти, предполагал, что это из-за всего вышесказанного, но, к сожалению, это не помогло. Не подскажете, куда копать?
Андрей Светлов
http://guppy-pe.sourceforge.net/
Levelup
Всё получилось! Спасибо огромное за помощь! Тема закрыта
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB