Как эффективно переопределить метод рисования спрайта для изменения отдельных пикселей?

Видимо в cocos2d-x вы можете переопределить метод рисования спрайта, чтобы делать интересные вещи. К сожалению, у меня нет опыта работы с OpenGL, поэтому мне сложно разобраться, что происходит в этом методе:

void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
#if CC_USE_CULLING
// Don't do calculate the culling if the transform was not updated
auto visitingCamera = Camera::getVisitingCamera();
auto defaultCamera = Camera::getDefaultCamera();
if (visitingCamera == defaultCamera) {
_insideBounds = ((flags & FLAGS_TRANSFORM_DIRTY)|| visitingCamera->isViewProjectionUpdated()) ? renderer->checkVisibility(transform, _contentSize) : _insideBounds;
}
else
{
_insideBounds = renderer->checkVisibility(transform, _contentSize);
}

if(_insideBounds)
#endif
{
_trianglesCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, _polyInfo.triangles, transform, flags);
renderer->addCommand(&_trianglesCommand);

#if CC_SPRITE_DEBUG_DRAW
_debugDrawNode->clear();
auto count = _polyInfo.triangles.indexCount/3;
auto indices = _polyInfo.triangles.indices;
auto verts = _polyInfo.triangles.verts;
for(ssize_t i = 0; i < count; i++)
{
//draw 3 lines
Vec3 from =verts[indices[i*3]].vertices;
Vec3 to = verts[indices[i*3+1]].vertices;
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::WHITE);

from =verts[indices[i*3+1]].vertices;
to = verts[indices[i*3+2]].vertices;
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::WHITE);

from =verts[indices[i*3+2]].vertices;
to = verts[indices[i*3]].vertices;
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::WHITE);
}
#endif //CC_SPRITE_DEBUG_DRAW
}
}

Учитывая пиксели, я знаю, как преобразовать мое изображение (отдельные пиксели), чтобы получить желаемый результат, но это включает в себя итерацию по всем пикселям в изображении и внесение изменений по мере необходимости, кроме того, я могу сделать это до запуска (в автономном режиме, до создание моего приложения) для создания статических изображений, которые я использую в приложении. Я пытаюсь выяснить, как я могу сделать то же самое во время выполнения (эффективно), так как я предполагаю, что та же самая техника, которую я использую для генерации изображений, использует много CPU (так как я перебираю пиксели и не использую OpenGL) ,

Может ли кто-нибудь указать мне правильное направление? Я не пытаюсь создать графический движок или что-то еще … Я просто пытаюсь быстро изменять пиксели во время выполнения ….

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]