gpt4 book ai didi

c++ - 设置窗口大小后,SDL 未渲染到整个窗口

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:42 44 4
gpt4 key购买 nike

下面是我使用SDL加载图片的步骤。

  1. 创建窗口并以默认大小呈现,例如 100x100
  2. 使用 IMG_LoadTexture 从图像创建纹理
  3. 查询纹理信息并获取纹理尺寸,例如 800x600,然后使用 SDL_SetWindowSize 调整到所需尺寸
  4. 执行渲染

结果是SDL在窗口创建时只渲染到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++ - 设置窗口大小后,SDL 未渲染到整个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946213/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com