私はファイル記述子によってスクリーンvsyncイベントを捕まえることができると思います。投票| epoll] ing it。GLX Vsyncイベント
私が正しい場合、通常、glXSwapBuffers()私のような何かを行うことができるようにプロセスをブロックしません:VSYNCイベントが起こるとするときだから私は、私は関係なく、すべてのイベントをtrigの可能性ができ
int init() {
create epollfd;
add Xconnection number to it;
add some other fd like socket timer tty etc...
possibly add a vsync fd like dri/card0 or fb0 or other???
return epollfd;
}
main() {
int run = 1;
int epollfd = init();
while(run) {
epoll_wait(epollfd, ...) {
if(trigedfd = socket) {
do network computing;
}
if(trigedfd = timer) {
do physics computing;
}
if(trigedfd = tty) {
do electronic communications;
}
if(trigedfd = Xconnection number) {
switch(Xevent) {
case key event:
do key computing;
case mouse event:
do mouse computing;
case vsync???:
do GL computings;
glXSwapBuffers();
}
}
if(trigedfd = dri/card0 or fb0 or other???) {
do GL computings;
glXSwapBuffers();
}
}
}
を私がX描画関数だけを使用し、おそらくGLをvsyncに使用する場合、同じ時間の引き裂き効果を避けてください。
libdrmを教えてください。
vsyncイベントをキャッチするためにどのようなfdを使用する必要がありますか、このfdでshureを作成する方法は、発生したイベントはvsyncイベントですか?
私はそれを一口にしたいと思います。 私は接続でき、 "vsyncが起こったときに私を覚えてください"という要求を送るサーバーのように振る舞う分離プロセスを作ることができます。このプロセスはglFinishでブロックし、ソケットやパイプなどで何かを送ることができます。それも避けてください。 –
これはなぜ正確にお望みですか?これは[XY問題]のケース(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)ですか? – davmac
私は自分自身のライブラリ/ apiを作成しています。プロセスのすべてのincommingイベントに対して1つの同期ポイントしか持ちません。 –