Я использую 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) ... Любые идеи по этому поводу?
Это должно быть то, что вы ищете: http://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528 – rgngl
Спасибо! Эта ссылка очень полезна. Таким образом, моя единственная проблема с этим решением - это возможность сделать что-то похожее на «glPointSizePointerOES» в GLSL (по ссылке, предложенной для использования униформы для размера точки), так много разных точек с разными размерами не могут быть выгружены в пакетном вызове с glDrawArrays). Я думал об использовании атрибута вместо униформы, но тогда мне нужно было бы всегда передавать PointSize в мои шейдеры - даже если я не рисую GL_POINTS. Итак, может быть, второй шейдер (шейдер только для GL_POINTS) ?! Есть идеи по этому поводу? – Constantin