我正在将应用程序从SDL 1.2迁移到2.0,它保留了一个脏矩形数组,以确定将其SDL_Surface的哪些部分绘制到屏幕上。我正在尝试找到将其与SDL 2的SDL_Texture集成的最佳方法。
SDL 1.2驱动程序的工作原理如下:https://gist.github.com/nikolas/1bb8c675209d2296a23cc1a395a32a0d
这就是我在SDL 2中如何从表面更改为纹理的方法。
> lua border.lua
(world)
world
(hello]
hello
-)(+
)(
nil
nil
我只是更新整个表面,然后利用RenderCopy()中的脏矩形。有没有更好的方法来处理事情,只更新脏矩形?我会在每帧调用SDL_LockTexture和UnlockTexture多达一百次时遇到麻烦吗,或者这是如何使用它们的?
SDL_LockTexture接受我可以在此处使用的SDL_Rect参数,但是我不清楚如何从void *pixels;
int pitch;
SDL_LockTexture(_sdl_texture, NULL, &pixels, &pitch);
memcpy(
pixels, _sdl_surface->pixels,
pitch * _sdl_surface->h);
SDL_UnlockTexture(_sdl_texture);
for (int i = 0; i < num_dirty_rects; i++) {
SDL_RenderCopy(
_sdl_renderer, _sdl_texture, &_dirty_rects[i], &_dirty_rects[i]);
}
SDL_RenderPresent(_sdl_renderer);
获取适当的矩形。我如何从整个屏幕的像素数据中复制出一个小矩形?