【发布时间】:2018-08-25 23:48:46
【问题描述】:
使用 SDL2 (2.0.8) 时,使用 SDL_RenderDrawRect 或 SDL_RenderDrawLine 绘制 2D 矩形或线条不是像素完美的。有一些文物。这是为什么?有没有办法防止这种情况发生?
代码示例:
#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
【问题讨论】:
-
您应该提供用于渲染的代码。然而,你如何初始化窗口并在其上缩放。
-
像素完美在我的机器上。
-
感谢您添加 MCVE 代码。我剪切粘贴、编译并在我的机器上运行它......仍然像素完美。斯科特马奇的回答有效吗?也许我机器上的默认值与你机器上的默认值不同。
-
是的,这是机器设置,请参阅我的回答。
标签: c++ windows sdl-2 dpi renderer