【发布时间】:2020-05-02 20:52:32
【问题描述】:
刚刚在我的引擎中实现了一个 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) 时出现段错误。
正如我所提到的,在我实现渲染器之前,调整大小工作正常。
为什么会这样?
【问题讨论】:
-
wiki.libsdl.org/SDL_GetWindowSurface 不要释放这个表面。 ... 你不能在这个窗口上将它与 3D 或渲染 API 结合起来。
标签: sdl game-engine renderer