#pragma once #include "..\Common\DeviceResources.h" #include "ShaderStructures.h" #include "..\Common\StepTimer.h" namespace $ext_safeprojectname$ { // 此示例呈现器实例化一个基本渲染管道。 class Sample3DSceneRenderer { public: Sample3DSceneRenderer(const std::shared_ptr& deviceResources); ~Sample3DSceneRenderer(); void CreateDeviceDependentResources(); void CreateWindowSizeDependentResources(); void Update(DX::StepTimer const& timer); bool Render(); void SaveState(); void StartTracking(); void TrackingUpdate(float positionX); void StopTracking(); bool IsTracking() { return m_tracking; } private: void LoadState(); void Rotate(float radians); private: // 常量缓冲区大小必须都是 256 字节的整数倍。 static const UINT c_alignedConstantBufferSize = (sizeof(ModelViewProjectionConstantBuffer) + 255) & ~255; // 缓存的设备资源指针。 std::shared_ptr m_deviceResources; // 立体几何的 Direct3D 资源。 Microsoft::WRL::ComPtr m_commandList; Microsoft::WRL::ComPtr m_rootSignature; Microsoft::WRL::ComPtr m_pipelineState; Microsoft::WRL::ComPtr m_cbvHeap; Microsoft::WRL::ComPtr m_vertexBuffer; Microsoft::WRL::ComPtr m_indexBuffer; Microsoft::WRL::ComPtr m_constantBuffer; ModelViewProjectionConstantBuffer m_constantBufferData; UINT8* m_mappedConstantBuffer; UINT m_cbvDescriptorSize; D3D12_RECT m_scissorRect; std::vector m_vertexShader; std::vector m_pixelShader; D3D12_VERTEX_BUFFER_VIEW m_vertexBufferView; D3D12_INDEX_BUFFER_VIEW m_indexBufferView; // 用于渲染循环的变量。 bool m_loadingComplete; float m_radiansPerSecond; float m_angle; bool m_tracking; }; }