2011-10-10 6 views
5

Я использую ParticleSystem с PointSprites (вдохновленный источником Cocos2D). Но мне интересно, как восстановить функциональные возможности для OpenGL ES 2.0GLSL PointSprite для системы частиц

glEnable(GL_POINT_SPRITE_OES); 
glEnableClientState(GL_POINT_SIZE_ARRAY_OES); 
glPointSizePointerOES(GL_FLOAT,sizeof(PointSprite),(GLvoid*) (sizeof(GL_FLOAT)*2)); 
glDisableClientState(GL_POINT_SIZE_ARRAY_OES); 
glDisable(GL_POINT_SPRITE_OES); 

эти генерировать BAD_ACCESS при использовании 2.0 контекста OpenGL ES. Должен ли я просто пойти с двумя TRIANGLES за PointSprite? Но это, вероятно, не очень эффективно (накладные расходы для дополнительных вершин).

EDIT: Итак, моя новая проблема с предложенным решением от: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

возможность пройти множество различных размеров в пакетном вызове. Я думал об использовании атрибута вместо униформы, но тогда мне нужно было бы всегда передавать PointSize в мои шейдеры - даже если я не рисую GL_POINTS. Итак, может быть, второй шейдер (шейдер только для GL_POINTS) ?! Я не знаю, накладные расходы для переключения шейдеров каждый кадр в рутине рисования (потому что если система частиц используется, я хочу, естественно, также сделать регулярные GL_TRIANGLES без pointSize) ... Любые идеи по этому поводу?

+1

Это должно быть то, что вы ищете: http://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528 – rgngl

+0

Спасибо! Эта ссылка очень полезна. Таким образом, моя единственная проблема с этим решением - это возможность сделать что-то похожее на «glPointSizePointerOES» в GLSL (по ссылке, предложенной для использования униформы для размера точки), так много разных точек с разными размерами не могут быть выгружены в пакетном вызове с glDrawArrays). Я думал об использовании атрибута вместо униформы, но тогда мне нужно было бы всегда передавать PointSize в мои шейдеры - даже если я не рисую GL_POINTS. Итак, может быть, второй шейдер (шейдер только для GL_POINTS) ?! Есть идеи по этому поводу? – Constantin

ответ

0

Так делает вещь здесь, как я уже заметил здесь, что вам нужно: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

И для какого подхода к работе, я могу либо сказать вам использовать различные шейдер для различных типов вводимого коэффициента в вашем приложении или просто еще одна булева форма в вашем шейдере и включить и отключить изменение gl_PointSize через ваш шейдерный код. Это обычно зависит от вас. То, что вам нужно иметь в виду, - это изменение шейдерной программы - одна из самых дорогостоящих операций, поэтому в этом случае будет лучше сделать рисунок того же типа объектов в пакете. Я не уверен, что использование инструкции if в вашем шейдерном коде даст огромное влияние на производительность.