从SDL 1.2中的RGB值数组渲染像素?

时间:2013-12-24 01:40:31

标签: c++ rendering sdl pixel

我现在正在使用NES模拟器,我无法弄清楚如何渲染像素。我使用3维数组来保存每个像素的RGB值。对于256 x 224屏幕大小,数组定义如下所示:

byte screenData[224][256][3];

例如,[0][0][0]保持蓝色值,[0][0][1]保持绿色值,[0][0][2]保持屏幕位置[0][0]处像素的红色值。

当vblank标志变高时,我需要渲染屏幕。当SDL去渲染屏幕时,screenData数组将充满每个像素的RGB值。我能够找到一个名为SDL_CreateRGBSurfaceFrom的函数,看起来它可能适用于我想要做的事情。但是,我见过的所有例子都使用1维数组作为RGB值而不是3维数组。

渲染像素的最佳方式是什么?如果函数允许我以某种方式调整表面大小,那么我也不会使用256 x 224窗口大小。

2 个答案:

答案 0 :(得分:3)

您需要将数据存储为一维char数组

int channels = 3; // for a RGB image
char* pixels = new char[img_width * img_height * channels];

// populate pixels with real data ...

SDL_Surface *surface = SDL_CreateRGBSurfaceFrom((void*)pixels,
                img_width,
                img_height,
                channels * 8,          // bits per pixel = 24
                img_width * channels,  // pitch
                0x0000FF,              // red mask
                0x00FF00,              // green mask
                0xFF0000,              // blue mask
                0);                    // alpha mask (none)

答案 1 :(得分:0)

在2.0中,使用SDL_Texture + SDL_TEXTUREACCESS_STREAMING + SDL_RenderCopy,它比SDL_RenderPoint更快。

请参阅:

相关:Why do I get bad performance with SDL2 and SDL_RenderCopy inside a double for loop over all pixels?