设置窗口大小后,SDL不会渲染到整个窗口
SDL not render to the full window after set window size
这是我使用SDL加载图像的步骤。
- 创建窗口和渲染默认大小,例如
100x100
- 用
IMG_LoadTexture
从图像创建纹理 - 查询纹理信息并获取纹理维度,例如
800x600
,然后使用SDL_SetWindowSize
调整大小到所需的大小 - 执行渲染
结果仅在窗口创建时仅渲染到100x100
区域,另一部分不是渲染。
SDL_SetWindowSize
之后如何使SDL渲染到全窗?
以下是我的示例代码
#include <iostream>
#include <SDL_image.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_Window* sdlWindow;
SDL_Renderer* sdlRenderer;
SDL_CreateWindowAndRenderer(100, 100, 0, &sdlWindow, &sdlRenderer);
IMG_Init(IMG_INIT_JPG);
SDL_Texture* sdlTexture = IMG_LoadTexture(sdlRenderer, "test-wallpaper-800x600.jpg");
Uint32 format;
int access, w, h;
if (SDL_QueryTexture(sdlTexture, &format, &access, &w, &h) == 0) {
SDL_SetWindowSize(sdlWindow, w, h);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
SDL_RenderSetLogicalSize(sdlRenderer, w, h);
}
SDL_RenderClear(sdlRenderer);
SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
SDL_RenderPresent(sdlRenderer);
SDL_Event sdlEvent;
while (SDL_WaitEvent(&sdlEvent)) {
if (sdlEvent.type == SDL_WINDOWEVENT
&& sdlEvent.window.event == SDL_WINDOWEVENT_CLOSE) {
break;
}
if (sdlEvent.type == SDL_KEYDOWN
&& sdlEvent.key.keysym.sym == SDLK_ESCAPE) {
break;
}
}
SDL_DestroyRenderer(sdlRenderer);
SDL_DestroyWindow(sdlWindow);
return 0;
}
您看不到更新的渲染,因为您只在框架循环之前渲染一次。要解决此问题,请将渲染效果移到框架循环中,例如:
SDL_Event sdlEvent;
while (SDL_WaitEvent(&sdlEvent))
{
if (sdlEvent.type == SDL_WINDOWEVENT
&& sdlEvent.window.event == SDL_WINDOWEVENT_CLOSE) {
break;
}
if (sdlEvent.type == SDL_KEYDOWN
&& sdlEvent.key.keysym.sym == SDLK_ESCAPE) {
break;
}
// Render here
SDL_RenderClear(sdlRenderer);
SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
SDL_RenderPresent(sdlRenderer);
}
相关文章:
- 在C++中获取应用程序窗口的大小
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- 如何以编程方式更改基于对话框的窗口的大小和位置?
- 如何在Qt中修复MDI子窗口的大小
- win32 自动调整父窗口的大小以适合其内容
- 如何调整地铁窗口的大小
- 调整 SDL2 窗口的大小
- Buit矩形(我自己的类型),不会随窗口调整大小
- 获取确切的窗口区域大小 - 创建窗口窗口大小不正确
- 插件如何调整其窗口的大小
- 在 C 语言中将窗口控制台大小调整为全屏
- 调整Qml窗口的大小
- 如何有效地调整DirectX窗口的大小
- 设置MFC应用程序中窗口的大小
- 如何在VTK中自动调整渲染窗口的大小
- 调整我简单的OpenGL/GLUT窗口的大小会产生奇怪的线条
- 设置OpenGL中窗口的大小
- 如何修复我的Qt窗口的大小
- 当嵌入一个应用程序到Qt应用程序,如何获得mouseMoveEvent和嵌入窗口的大小
- 如何更改窗口的大小DepthBasics