Я рисую непосредственно в image с помощью setpixel, colormap. Все было хорошо при проверке инструментов рисования пока не дошло до кисти с разными размерами, дело в том что при быстрых движениях мыши FPS падает до 30. Хотя я знаю что проблема с циклами и частыми вызовами setPixel, но пока что я не знаю другого способа. Думал о варианте с фрагментными шейдерами.
inline void drawLineDDA(sf::Image* image, sf::Vector2f p0, sf::Vector2f p1, sf::Color color)
{
int dx = p1.x - p0.x;
int dy = p1.y - p0.y;
int steps;
float x = p0.x;
float y = p0.y;
if (abs(dx)>abs(dy)) steps = abs(dx);
else steps = abs(dy);
float xi = dx / (float)steps;
float yi = dy / (float)steps;
//image->setPixel((x), (y), color);
for (int i = -40; i <= 40; i++)
{
for (int j = -40; j <= 40; j++)
image->setPixel(x + i, y + j, color);
}
for (int k = 0; k < steps; k++)
{
x += xi;
y += yi;
//image->setPixel(x, y, color);
for (int i = -40; i <= 40; i++)
{
for (int j = -40; j <= 40; j++)
image->setPixel(x + i, y + j, color);
}
}
}