gpt4 book ai didi

c++ - 为什么 SDL2 矩形和线条画不是像素完美的?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:11 33 4
gpt4 key购买 nike

使用 SDL2 (2.0.8) 时,使用 SDL_RenderDrawRect 或 SDL_RenderDrawLine 绘制二维矩形或线条不是像素完美的。有一些文物。这是为什么?有什么办法可以防止这种情况发生吗?

SDL2 rectangle and line drawing

代码示例:

#ifdef WIN32
#include "SDL.h"
#else
#include "SDL2/SDL.h"
#endif

int main(int argc, char* args[])
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* window = SDL_CreateWindow("test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 800, SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, 0,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
SDL_Event event;
bool quit = false;
while (!quit)
{
SDL_WaitEvent(&event);
switch (event.type)
{
case SDL_QUIT:
{
quit = true;
break;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderDrawLine(renderer, 40, 10, 60, 10);
SDL_Rect rect{10, 10, 20, 20};
SDL_RenderDrawRect(renderer, &rect);
SDL_RenderPresent(renderer);
}
return 0;
}

环境:宏碁笔记本电脑,英特尔高清显卡,NVIDIA GEFORCE 940m,Windows 10

最佳答案

在我的 Windows 10 显示设置中,“缩放和布局”设置为“125%”。将其设置为“100%”后,渲染像素完美。

Windows 10 display settings

尽管这只是一种变通方法。真正的解决方案是调用 Windows API 函数“SetProcessDpiAwareness”。我在此链接中找到了在不同 Windows 版本上执行此操作的答案和代码:

SetProcessDpiAwareness

根据 Windows 操作系统版本,有不同的方法来设置 DPI 感知。它可以通过编程方式或通过应用程序 list 进行设置。见

Microsoft docs .

将“缩放和布局”设置回“125%”并在我的应用程序开始时调用该函数会得到预期的结果。

关于c++ - 为什么 SDL2 矩形和线条画不是像素完美的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022130/

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