C++ 从SDL 1.2中的RGB值数组渲染像素?
我现在正在开发一个NES模拟器,我很难弄清楚如何渲染像素。我使用一个三维数组来保存每个像素的RGB值。对于256 x 224屏幕大小,阵列定义如下所示:C++ 从SDL 1.2中的RGB值数组渲染像素?,c++,rendering,sdl,pixel,C++,Rendering,Sdl,Pixel,我现在正在开发一个NES模拟器,我很难弄清楚如何渲染像素。我使用一个三维数组来保存每个像素的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_CreateRGB
byte screenData[224][256][3];
例如,[0][0][0]
保存蓝色值,[0][0][1]
保存绿色值,[0][0][2]
保存屏幕位置处像素的红色值[0][0]
当vblank标志变高时,我需要渲染屏幕。当SDL去渲染屏幕时,screenData数组将充满每个像素的RGB值。我从中找到了一个名为SDL_CreateRGBSurfaceFrom>的函数,看起来它可以实现我想要的功能。但是,我看到的所有示例都使用一维数组来表示RGB值,而不是三维数组
对我来说,渲染像素的最佳方式是什么?如果该函数允许我以某种方式调整曲面的大小,这样我就不必使用256 x 224的窗口大小,那就太好了 您需要将数据存储为一维
字符
数组:
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)
在2.0中,使用
SDL_纹理
+SDL_纹理访问流
+SDL_渲染复制
,它比SDL_渲染点
更快
见:
- 官方示例:
- 我的派生示例不需要blob数据,并比较了两种方法:
相关:我有一个窗口和一个曲面,如何更新窗口以使用我的曲面?没有setSurface()或updateSurface()函数。