@DeOxygen

Как оптимизировать рисование в SFML Image?

Я рисую непосредственно в 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);
			}
		}
	}
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
maaGames
@maaGames
Погроммирую программы
Например, создать буферную картинку размером с диаметр кисти и рисовать в эту картинку текстуру кисти (это не обязательно кружок, можно любую форму ксти сделать). А уже потом картинку кисти рисовать многократно на холсте. Не попиксельно, а функцией рисования картинки. Это должно быть намного быстрее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы