为了快速参考,SDL2_image 库中的 showimage.c 示例代码具有以下代码:
/* Show the window */
SDL_SetWindowTitle(window, argv[i]);
SDL_SetWindowSize(window, w, h);
SDL_ShowWindow(window);
done = 0;
while ( ! done ) {
while ( SDL_PollEvent(&event) ) {
/* some event handling code... */
}
/* Draw a background pattern in case the image has transparency */
draw_background(renderer, w, h);
/* Display the image */
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
SDL_Delay(100);
}
SDL_DestroyTexture(texture);
}
SDL_RenderCopy()
and SDL_RenderPresent()
被称为在while(!done)
block.
由于它只加载一张图像,我认为应该创建纹理并将其渲染到帧缓冲区一次,然后将其留在那里。所以SDL_RenderCopy()
and SDL_RenderPresent()
应该只调用一次:
/* Show the window */
SDL_SetWindowTitle(window, argv[i]);
SDL_SetWindowSize(window, w, h);
SDL_ShowWindow(window);
/* Draw a background pattern in case the image has transparency */
draw_background(renderer, w, h);
/* Display the image */
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
done = 0;
while ( ! done ) {
while ( SDL_PollEvent(&event) ) {
/* some event handling code... */
}
SDL_Delay(100);
}
SDL_DestroyTexture(texture);
}
在我的 ubuntu 12.04 上,图像按照我的预期显示。然而,在我使用 OSX 10.9.2 的 MBA 上,它是全黑的。
为什么有区别?