小编Tom*_*mas的帖子

SFML 怎么这么快?

我需要在窗口上逐个像素地用 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)

c++ pixel sfml

4
推荐指数
1
解决办法
586
查看次数

标签 统计

c++ ×1

pixel ×1

sfml ×1