モニタのリフレッシュレートをプログラムで取得する必要があります。コマンドラインXRandRと自分のコードの相違
私はgetコマンドラインでxrandrを(1.4.1、openSUSEの13)を入力する場合:
Screen 0: minimum 8 x 8, current 1920 x 1200, maximum 16384 x 16384
VGA-0 disconnected primary (normal left inverted right x axis y axis)
DVI-D-0 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
1920x1200 60.0*+
1920x1080 60.0
1680x1050 60.0
1600x1200 60.0
1280x1024 60.0
1280x960 60.0
1024x768 60.0
800x600 60.3
640x480 59.9
HDMI-0 disconnected (normal left inverted right x axis y axis)
この結果は、とりわけ、リフレッシュレート -q のnvidia-設定によって確認されました。 (-lX11 -lXext -lXrandr付き)G ++ 4.8.1でコンパイルした、:私は、次のコード(https://github.com/raboof/xrandr/blob/master/xrandr.c起源):実行したときに
しかし...
int nsize;
int nrate;
short *rates;
XRRScreenSize *sizes;
Display *dpy = XOpenDisplay(NULL);
Window root = DefaultRootWindow(dpy);
XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root);
printf ("Current rate: %d\n",XRRConfigCurrentRate(conf));
sizes = XRRConfigSizes(conf, &nsize);
printf(" SZ: Pixels Refresh\n");
for (int i = 0; i < nsize; i++) {
printf("%-2d %5d x %-5d", i, sizes[i].width, sizes[i].height);
rates = XRRConfigRates(conf, i, &nrate);
if (nrate)
printf(" ");
for (int j = 0; j < nrate; j++)
printf("%-4d", rates[j]);
printf("\n");
}
XRRFreeScreenConfigInfo(conf);
を私が取得:
Current rate: 50
SZ: Pixels Refresh
0 1920 x 1200 50
1 1920 x 1080 51
2 1680 x 1050 52
3 1600 x 1200 53
4 1280 x 1024 54
5 1280 x 960 55
6 1024 x 768 56
7 800 x 600 57
8 640 x 480 58
9 1440 x 900 59
10 1366 x 768 60
11 1280 x 800 61
12 1280 x 720 62
なぜこの結果が得られますか? 私は間違っていますか?
このソフトウェアは、OpenGL with GLEWを使用しています。これは影響を与えることができますか? glXQueryDrawable(dpy、drawable、GLX_SWAP_INTERVAL_EXT、& val)を呼び出しますが、その後は影響がないと思います。
追加情報:1-私は主に2-Iはちょうど(私たちの大きなプロジェクトの外に)単一のCファイルに上記のコードを入力した右のリフレッシュレートを取得するためにされて必要なもの、それをコンパイル(g ++ -o t0 test0.c -lX11 -lXrandr)、同じ誤った結果が得られます。 – GuillaumeR