我需要在窗口上逐个像素地用 C++ 绘制一些图形。为了做到这一点,我创建了一个 SFML 窗口、精灵和纹理。我将所需的图形绘制到 uint8_t 数组,然后用它更新纹理和精灵。这个过程大约需要2500 us。绘制两个填充整个窗口的三角形只需要10 us。这种巨大的差异怎么可能?我已经尝试多线程逐像素绘制,但两个数量级的差异仍然存在。我还尝试使用点图绘制像素,但没有任何改进。我知道 SFML 在后台使用一些 GPU 加速,但简单地循环并将值分配给像素阵列已经需要数百微秒。
有谁知道在窗口中分配像素值的更有效方法?
这是我用来比较三角形和逐像素绘制速度的代码示例:
#include <SFML/Graphics.hpp>
#include <chrono>
using namespace std::chrono;
#include <iostream>
#include<cmath>
uint8_t* pixels;
int main(int, char const**)
{
const unsigned int width=1200;
const unsigned int height=1200;
sf::RenderWindow window(sf::VideoMode(width, height), "MA: Rasterization Test");
pixels = new uint8_t[width*height*4];
sf::Texture pixels_texture;
pixels_texture.create(width, height);
sf::Sprite pixels_sprite(pixels_texture);
sf::Clock clock;
sf::VertexArray triangle(sf::Triangles, 3);
triangle[0].position = sf::Vector2f(0, height);
triangle[1].position = sf::Vector2f(width, height);
triangle[2].position = sf::Vector2f(width/2, height-std::sqrt(std::pow(width,2)-std::pow(width/2,2)));
triangle[0].color = sf::Color::Red; …Run Code Online (Sandbox Code Playgroud)