只需在我的引擎中实现一个SDL_Renderer
state_t init_rend(window_t *context,flag_t flags) {
rend.renderer = NULL;
rend.renderer = SDL_CreateRenderer(context,-1,flags);
rend.index = -1;
if (rend.renderer != NULL) {
return TRUE;
} else {
return FALSE;
}
}
在我的客户/测试应用中:
// Init Base2D game
init_env(VIDEO|AUDIO);
// Init Display display
init_disp(640,480,"Display",RESIZABLE|VISIBLE,make_color(255,255,255,255));
// Init Renderer renderer
init_rend(display->window,SOFTWARE);
// Game Loop
state_t status;
while (TRUE) {
update();
status = listen();
if (!status) {
break;
}
/* User Event Handles */
}
我可以使用以下方法成功调整窗口大小:
void resize_window() {
printf("I was here!\n");
SDL_FreeSurface(display->container);
printf("Now I am here\n");
display->container = SDL_GetWindowSurface(display->window);
SDL_FillRect(
display->container,
NULL,
SDL_MapRGBA(
display->container->format,
get_red(),
get_green(),
get_blue(),
get_alpha()
)
);
}
但是,由于我已经实现了渲染器,因此每当尝试调整显示尺寸时,尝试SDL_FreeSurface(display->container)
时都会出现段错误。
正如我所提到的,在实现渲染器之前,调整大小的效果很好。
为什么会这样?
答案 0 :(得分:1)
按照用户:keltar提供的链接,
在我看来,使用SDL2的方法是使用渲染器将其绘制到使用表面的旧SDL1方法的窗口界面上。
我就是这样做的,删除了surface
代码,只使用了渲染器,代码可以正常工作
谢谢