0

質問は Linux フレームバッファに関するもので、グラフィックが破れています。

最近、デスクトップから SDI グラフィック カードへの出力に取り組んでいますが、フレームバッファを使用するというアイデアを思いつきました。それは問題ありません。成功を出力しましたが、大きな問題があり、グラフィックが破れています。FBIO_WAITFORVSYNC と FBIOPAN_DISPLAY を使用して解決したいのですが、どちらも -1 を返します。ioctl(fd, FBIO_WAITFORVSYNC, 0) errno: 25 (デバイスに不適切な ioctl) ioctl(fb, FBIOPAN_DISPLAY, &vi) ,errno: 22 (無効な引数)

私が使用しているOSはUbuntu 12.04です。fbsetをインストールした後、両方のioctlコマンドがfb.hに含まれていることがわかりました。問題は、FBIO_WAITFORVSYNC と FBIOPAN_DISPLAY をうまく機能させる方法です。何か提案はありますか?

4

1 に答える 1

0

エラーコードが入れ替わっていませんか? もしそうなら、あなたは試すことができます:

    int zero = 0;
    ioctl(fd, FBIO_WAITFORVSYNC, &zero);

FBIOPAN_DISPLAY がサポートされておらず、フレーム バッファ サイズが 2 画面以上の場合 (解像度とピクセル深度に対して fixInfo.smem_len を確認してください)、次を試してください。

    static int bufferNumber = 0;
    //Assume the frame buffer has more memory than
    //just just 1 screen - either set xoffset or 
    //yoffset to flip to another page. 
    varInfo.yoffset = varInfo.yres * bufferNumber;
    ioctl(fd, FBIOPUT_VSCREENINFO, &varInfo);
    //now flip the buffer to which to render to
    bufferNumber = 1 - bufferNumber;
    //now render to appropriate frame-buffer page
    //assuming we change yoffset to switch pages
    pageBuffer = fixInfo.smem_start + 
                 (bufferNumber * 
                 (fixInfo.line_length / (varInfo.bits_per_pixel / 8) * 
                 varInfo.yres ));
于 2014-11-30T19:13:00.817 に答える