如何使用SDL_LockTexture()更新脏矩形?

时间:2019-03-02 04:35:21

标签: c graphics sdl sdl-2

我正在将应用程序从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); 获取适当的矩形。我如何从整个屏幕的像素数据中复制出一个小矩形?

0 个答案:

没有答案