我试图以表格的形式在纹理中显示char数组。它运行良好,但现在我想动态修改数组中的一些char(表中的值)而不重新加载整个渲染器。
我再次尝试使用SDL_RenderClear
和SDL_RenderPresent
,但它清除了整个窗口。
如何只选择表格的一部分并更改它而不修改其余部分?
void draw_battlefield(t_env *e, int origin_x, int origin_y, int width, int height)
{
int j;
float x;
float y;
SDL_Color color = {255, 0, 0, 0};
SDL_Surface *surface;
SDL_Texture *texture;
int texW = 0;
int texH = 0;
SDL_Rect dstrect;
j = -1;
x = (float)origin_x;
y = origin_y;
while (++j < 4096)
{
surface = TTF_RenderText_Solid(e->font_nb, base((unsigned char)e->battlefield[j]), color);
texture = SDL_CreateTextureFromSurface(e->renderer, surface);
texW = 0;
texH = 0;
SDL_QueryTexture(texture, NULL, NULL, &texW, &texH);
dstrect = fill_rect((int)x, (int)y, &texW, &texH);
x += ((float)width / 64);
SDL_RenderCopy(e->renderer, texture, NULL, &dstrect);
if ((j & 0x3f) == 0x3f)
{
x = (float)origin_x;
y += ((float)height / 64);
}
SDL_DestroyTexture(texture);
SDL_FreeSurface(surface);
}
}
答案 0 :(得分:0)
如果您只想刷新屏幕的一部分,可以使用视口。
来自lazyfoo.net教程的引用只是说了所有内容:
有些时候,您只想渲染部分屏幕,例如小地图。使用视口,您可以控制在屏幕上呈现的位置。
有关如何设置和获取与给定渲染相关联的视口的详细信息,请参阅SDL_RenderGetViewport
和SDL_RenderSetViewport
。
基本思想是用户可以设置要渲染的矩形,并且坐标将相对于矩形。如果您只想更新纹理而不刷新整个窗口,请将其放在视口中,这就是全部。