在 SDL 中将字节数组位块传输到屏幕

Blit a byte array to screen in SDL

我正在为学校实现一个软件光栅化器,我想简单地向 SDL 传递一个带有像素的缓冲区,并告诉它它们的格式(RGB,每像素 24b)。 SDL 然后会将其渲染到屏幕上。

我试过使用 SDL_Surface,但它似乎只适用于 headers 的图像或数据,因为以下失败:

    unsigned char pixels[BYTES_PER_PIXEL * SCREEN_WIDTH * SCREEN_HEIGHT];
    // ... all pixels are filled with white color

    imageSurface = SDL_CreateRGBSurfaceFrom(pixels,
      SCREEN_WIDTH,
      SCREEN_HEIGHT,
      sizeof(unsigned char) * BYTES_PER_PIXEL,       // depth
      SCREEN_WIDTH * BYTES_PER_PIXEL,               // pitch (row length * BPP)
      0x000000ff,                                   // red mask
      0x0000ff00,                                   // green mask
      0x00ff0000,                                   // blue mask
      0);                                           // alpha mask

错误是:SDL_CreateRGBSurfaceFrom失败:未知像素格式。 在 SDL 中最快的方法是什么?该方法与绘制到 OpenGL 纹理然后我将其渲染到全屏四边形上的速度也会有差异吗?

SDL_CreateRGBSurfaceFrom depth 参数为 the depth of the surface in bitssizeof(unsigned char) * BYTES_PER_PIXEL 是 3(假设 BYTES_PER_PIXEL 是 3,就像你说的是 24 bpp)应该是 24;乘以一个字节中的位数。

至于第二部分 - 是的。取决于很多因素,包括 CPU 和 GPU 硬件以及 GL 驱动程序。最好的测试方法是编写两个版本。然而,您不太可能会看到很大的改进,因为在屏幕上绘制单个四边形并不昂贵;光栅化器的其他部分应该消耗更多。