-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathCloudVariableReplacement.h
145 lines (114 loc) · 4.19 KB
/
CloudVariableReplacement.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//--------------------------------------------------------------------------------------
// CloudVariableReplacement.h
//
// Advanced Technology Group (ATG)
// Copyright (C) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#pragma once
#include "DeviceResources.h"
#include "StepTimer.h"
#include "xgamestreaming.h"
#include <unordered_map>
#include <string>
const int c_maxClients = 4;
struct ClientDevice
{
XGameStreamingClientId id;
XTaskQueueRegistrationToken propertiesChangedRegistration;
bool validOverlay;
bool smallScreen;
ClientDevice()
{
id = XGameStreamingNullClientId;
propertiesChangedRegistration = {};
validOverlay = false;
smallScreen = false;
}
};
// Available touch layouts in the included "sample-layouts" bundle
enum class TouchLayout
{
Standard = 0,
Fighting = 1
};
const std::unordered_map<TouchLayout, std::string> c_touchLayoutNames{
{TouchLayout::Standard, "standard-variable-replacement"},
{TouchLayout::Fighting, "fighting-variable-replacement"}
};
// The constraints on what the minimum (inclusive) and maximum (exclusive)
// bundle versions are supported.
const XVersion c_minimumBundleversion{0, 0, 0, 1};
const XVersion c_maximumBundleVersion{1, 0, 0, 0};
// A basic sample implementation that creates a D3D12 device and
// provides a render loop.
class Sample
{
public:
Sample() noexcept(false);
virtual ~Sample();
Sample(Sample&&) = delete;
Sample& operator= (Sample&&) = delete;
Sample(Sample const&) = delete;
Sample& operator= (Sample const&) = delete;
// Initialization and management
void Initialize(HWND window);
// Basic render loop
void Tick();
// Messages
void OnSuspending();
void OnResuming();
void OnConstrained() {}
void OnUnConstrained() {}
// Properties
bool RequestHDRMode() const noexcept { return m_deviceResources ? (m_deviceResources->GetDeviceOptions() & DX::DeviceResources::c_EnableHDR) != 0 : false; }
XTaskQueueHandle GetTaskQueue() const noexcept { return m_queue; };
ClientDevice* GetClientById(XGameStreamingClientId clientId);
void UpdateClientState();
void UpdateOverlayState(XGameStreamingClientId clientId);
ClientDevice m_clients[c_maxClients];
private:
void Update(DX::StepTimer const& timer);
void Render();
void Clear();
void CreateDeviceDependentResources();
void CreateWindowSizeDependentResources();
// Device resources.
std::unique_ptr<DX::DeviceResources> m_deviceResources;
// Rendering loop timer.
uint64_t m_frame;
DX::StepTimer m_timer;
// Input device.
Microsoft::WRL::ComPtr<IGameInput> m_gameInput;
Microsoft::WRL::ComPtr<IGameInputReading> m_reading;
std::wstring m_typeString;
// Game state.
bool m_buttonDown;
bool m_streaming;
bool m_validOverlay;
TouchLayout m_activeLayout;
bool m_yVisibility;
bool m_aEnabled;
double m_bOpacity;
XTaskQueueRegistrationToken m_token;
XTaskQueueHandle m_queue;
// DirectXTK objects.
std::unique_ptr<DirectX::GraphicsMemory> m_graphicsMemory;
std::unique_ptr<DirectX::DescriptorHeap> m_resourceDescriptors;
// UI
std::unique_ptr<DirectX::SpriteBatch> m_batch;
DirectX::SpriteFont* m_font;
std::unique_ptr<DirectX::SpriteFont> m_localFont;
std::unique_ptr<DirectX::SpriteFont> m_remoteFont;
std::unique_ptr<DirectX::SpriteFont> m_ctrlFont;
Microsoft::WRL::ComPtr<ID3D12Resource> m_circleTexture;
Microsoft::WRL::ComPtr<ID3D12Resource> m_background;
enum Descriptors
{
PrintLocalFont,
PrintRemoteFont,
ControllerFont,
Touch,
Background,
Count,
};
};