SDL_RENDERER_PRESENTVSYNC不一致显示
SDL_RENDERER_PRESENTVSYNC Inconsistently Displays
我最近决定使用SDL作为我的库之一来编写一款c++游戏。在我编写程序和学习SDL的过程中,我偶然发现了程序中的一个奇怪的错误,并决定在SSCCE中复制它,以确保我没有疯。
问题似乎是,当我传递SDL_RENDERER_PRESENTVSYNC作为一个标志到SDL_CreateRenderer,我得到不一致的渲染。为了进行比较,我运行了50次带有标志的程序,50次不带有标志的程序,并在每种情况下将其作为对程序的唯一更改。没有旗子,显示屏100%正常工作。在打开标志的情况下,50次中只有13次渲染成功。
程序如下:
#include <SDL2/SDL.h>
#include <iostream>
int main(int argc, char** argv)
{
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
std::cerr << "Unable to initialize SDL: " << SDL_GetError() << std::endl;
return -1;
}
SDL_Window* win = SDL_CreateWindow("Testing",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED |
SDL_RENDERER_PRESENTVSYNC);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
for(int x = 0; x < 640; x+=32)
{
for(int y = 0; y < 480; y+=32)
{
SDL_Rect rect = {x+1, y+1, 31, 31};
SDL_RenderFillRect(renderer, &rect);
}
}
SDL_RenderPresent(renderer);
SDL_Delay(500);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
如果有区别的话,我在Ubuntu 15.04, GCC/g++ 4.9.2,编译和链接SDL 2.0.2上编译和测试这个程序。
对SDL这么陌生,对c++和C还是比较陌生的(我来自Java背景),我想我很可能犯了一个简单的错误,我没有抓住,但我想不出我可能做了什么。
对于那些在未来看到这个问题的人来说,这个问题似乎在一年多以后就解决了,因为我不能再复制我自己的SSCCE了。这可能是环境的变化,因为我没有使用相同的系统,现在使用的是英伟达显卡。问题,虽然我不能再证实这一点,几乎可以肯定是在环境或硬件。同样的笔记本电脑在仅仅一两个月后就出现了故障(主板问题),所以你可以从中吸取教训。如果您遇到同样的问题,请考虑检查您的硬件运行状况,并尝试一个完全干净的环境。
相关文章:
- 大于65535的C++数组[size]引发不一致的溢出
- 密码登录程序将永远循环并显示不正确的结果
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- void 函数中的指针参数返回不一致的值
- C++ - 为什么我的cout代码显示小数不一致
- 智能感知在VS2008中突然停止工作或显示大量不一致
- SDL_RENDERER_PRESENTVSYNC不一致显示