Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;在执行操作之前等待一帧 你如何等待C++中的框架?_C++_Opengl_Frame - Fatal编程技术网

C++;在执行操作之前等待一帧 你如何等待C++中的框架?

C++;在执行操作之前等待一帧 你如何等待C++中的框架?,c++,opengl,frame,C++,Opengl,Frame,我不想让程序睡眠或其他任何事情 事情会发展得很顺利 在该框架中执行此操作(1) 继续程序的其余部分 在下一帧(2)中执行此操作 其中,动作1仅在第一帧中发生,动作2仅在下一帧中发生。它将继续这样下去。一,二,一,二 我有帧间的时间,我使用C++,我使用Visual Studio 2008编译。 编辑: 我使用的是Opengl,我的操作系统是Windows7 框架- 就像在给定时间段内打印到屏幕上的每个场景图像一样,我在这里做一些假设 假设您有一个要显示其状态的模型。您可能希望最大限度地利用演化模

我不想让程序睡眠或其他任何事情

事情会发展得很顺利

在该框架中执行此操作(1)

继续程序的其余部分

在下一帧(2)中执行此操作

其中,动作1仅在第一帧中发生,动作2仅在下一帧中发生。它将继续这样下去。一,二,一,二

<>我有帧间的时间,我使用C++,我使用Visual Studio 2008编译。 编辑:

我使用的是Opengl,我的操作系统是Windows7

框架-
就像在给定时间段内打印到屏幕上的每个场景图像一样,我在这里做一些假设

假设您有一个要显示其状态的模型。您可能希望最大限度地利用演化模型而不是渲染所花费的CPU时间

因此,将目标帧速率固定为25 fps

同样,假设您已经优化了渲染,以便可以在不到0.04秒的时间内完成渲染

因此,您可能需要(伪代码):

当然,您可能有一个输入处理程序来中断循环。请注意,此方法假定您不希望模型演化受到已用实时的影响。如果您这样做了,并且游戏可能会这样做,那么将
当前
时间传递给
evolveModelABit()

对于Windows上的时间函数,您可以使用:

    LARGE_INTEGER frequency;        // ticks per second
    LARGE_INTEGER t1;           // ticks
    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&t1);
请注意,此方法适用于科学类型的模拟。模型的演化不依赖于帧速率、渲染等,并且每次都给出相同的结果

对于游戏来说,通常会有一个最大化fps的推动力。这意味着主循环的形式为:

Time lastRendertime = now();
while(forever)
{
    Time current = now();
    evolveModelABit(current, lastRenderTime);  
    renderEverything();
    lastRenderTime = current;
}

如果启用V-Sync,SwapBuffers将阻止当前线程,直到显示下一帧。因此,如果在SwapBuffers调用之前创建一个工作线程,并释放一个锁,或恢复其执行,那么您的程序将收到CPU时间,否则它将在等待交换块期间让渡给系统的其余部分。如果工作线程正在操作GPU资源,最好使用高分辨率/性能计数器来确定距离交换还剩多少时间,减去一些余量,并在工作线程中使用此计时,以便工作线程在交换发生时将自己置于睡眠状态,这样GPU就不必在工作线程和渲染线程之间切换上下文。

什么是帧?窗口?您希望程序在此期间执行什么操作?您使用的是什么操作系统和窗口系统/工具包?还是你在使用OpenGL或DirectX?@code我认为这是一个动画框架正如Jason所说,要回答这个问题,你必须提供你正在使用的操作系统和图形库。谢谢,这实际上为我打开了一个全新的话题。但我最初想知道的是,如何在下一帧之前对GPU的遮挡查询结果进行轮询。
Time lastRendertime = now();
while(forever)
{
    Time current = now();
    evolveModelABit(current, lastRenderTime);  
    renderEverything();
    lastRenderTime = current;
}