在 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 bits
。 sizeof(unsigned char) * BYTES_PER_PIXEL
是 3(假设 BYTES_PER_PIXEL 是 3,就像你说的是 24 bpp)应该是 24;乘以一个字节中的位数。
至于第二部分 - 是的。取决于很多因素,包括 CPU 和 GPU 硬件以及 GL 驱动程序。最好的测试方法是编写两个版本。然而,您不太可能会看到很大的改进,因为在屏幕上绘制单个四边形并不昂贵;光栅化器的其他部分应该消耗更多。
我正在为学校实现一个软件光栅化器,我想简单地向 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 bits
。 sizeof(unsigned char) * BYTES_PER_PIXEL
是 3(假设 BYTES_PER_PIXEL 是 3,就像你说的是 24 bpp)应该是 24;乘以一个字节中的位数。
至于第二部分 - 是的。取决于很多因素,包括 CPU 和 GPU 硬件以及 GL 驱动程序。最好的测试方法是编写两个版本。然而,您不太可能会看到很大的改进,因为在屏幕上绘制单个四边形并不昂贵;光栅化器的其他部分应该消耗更多。