将一个字节数组Blit到SDL中进行屏幕显示

时间:2016-11-19 18:47:42

标签: opengl graphics sdl

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

我尝试过使用SDL_Surface,但似乎只能处理带有标题的图像或数据,因为以下内容失败了:

    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纹理之间会有速度差异,然后我会渲染到全屏四边形上吗?

1 个答案:

答案 0 :(得分:1)

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驱动程序。最好的测试方法是编写两个版本。然而,由于在屏幕上绘制单个四边形并不是昂贵的操作,因此您不太可能看到大的改进;栅格化器的其他部分应该消耗更多。