SDL2 段错误 - 实现渲染器
SDL2 Segfaults - Implementing a renderer
刚刚在我的引擎中实现了 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;
}
}
在我的 client/test 应用中:
// 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 */
}
而且我可以通过以下方式成功处理 window 大小调整:
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)
.
时出现段错误
正如我所提到的,在我实现渲染器之前调整大小工作正常。
为什么会这样?
遵循 user:keltar 提供的 link,
在我看来,使用 SDL2 的方法是使用渲染器绘制到 window 而不是使用表面的旧 SDL1 方法。
我就是这样做的,删除了 surface
代码并仅使用了渲染器,代码工作正常
谢谢
刚刚在我的引擎中实现了 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;
}
}
在我的 client/test 应用中:
// 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 */
}
而且我可以通过以下方式成功处理 window 大小调整:
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)
.
正如我所提到的,在我实现渲染器之前调整大小工作正常。
为什么会这样?
遵循 user:keltar 提供的 link,
在我看来,使用 SDL2 的方法是使用渲染器绘制到 window 而不是使用表面的旧 SDL1 方法。
我就是这样做的,删除了 surface
代码并仅使用了渲染器,代码工作正常
谢谢