XGameStreamingGetAssociatedFrame
获取来自特定输入读数的帧管道令牌。
语法
HRESULT XGameStreamingGetAssociatedFrame(
IGameInputReading* gamepadReading,
D3D12XBOX_FRAME_PIPELINE_TOKEN* framePipelineToken
)
参数
gamepadReading _In_
类型:IGameInputReading*
正在查询的游戏手柄读数。
framePipelineToken _Out_
类型:D3D12XBOX_FRAME_PIPELINE_TOKEN*
当玩家执行输入时,与显示在客户端设备上的帧相关联的帧管道令牌。 此管道令牌由游戏呈现并被发送到客户端设备时,它相当于技术 PresentX 调用。
返回值
类型:HRESULT
如果成功,则返回 S_OK;否则返回错误代码。
可能的错误
错误代码 | 错误值 | 错误原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize。 |
E_GAMESTREAMING_NO_DATA | 0x89245402 | 请求的数据目前不可用, 稍后或许可用。 |
E_GAMESTREAMING_NOT_STREAMING_CONTROLLER | 0x89245404 | 当前读数并非来自串流控制器。 |
备注
当玩家流式处理游戏时,如果游戏需要根据输入时玩家设备上显示的特定帧更改游戏行为,则可以使用 XGameStreamingGetAssociatedFrame
。
这使游戏能够根据玩家在输入时看到的帧而不是当前帧来做出模拟决定。
XGameStreamingGetAssociatedFrame
只能提供在创建新输入读数时创建的相关帧的游戏信息。 如果游戏需要确定在玩家未完成输入时要显示的内容,则游戏应使用 XGameStreamingGetLastFrameDisplayed。
示例
// In this example, when processing input, the game would like to pass along the frame
// that was being displayed to the player at the time of input so that their simulation
// engine can take that into account.
// The framePipelineToken was initially captured at the callback of WaitFrameEventX
void Game::Update(DX::StepTimer const& timer)
{
IGameInputReading* reading;
if (SUCCEEDED(g_gameInput->GetCurrentReading(GameInputKindGamepad, g_gamepad, &reading)))
{
D3D12XBOX_FRAME_PIPELINE_TOKEN framePipelineToken = D3D12XBOX_FRAME_PIPELINE_TOKEN_NULL;
if SUCCEEDED(XGameStreamingGetAssociatedFrame(&reading, &framePipelineToken))
{
SimulateBasedOnInputAndFrameDisplayed(reading, framePipelineToken);
}
else
{
// simulate based on current frame
SimulateBasedOnInput(reading);
}
reading->Release();
}
}
要求
头文件:xgamestreaming.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XGameStreamingGetLastFrameDisplayed
XGameStreaming
游戏流式传输延迟补偿概述