#pragma once #include "SharedMethods.h" #include "DirectXFramework.h" #include "SubMeshNode.h" #include "Renderer.h" #include "Mesh.h" class SubMeshRenderer : public Renderer { public: void SetRootChildren(list& rootChildren); void SetWorldTransformation(FXMMATRIX worldTransformation); void SetAmbientLight(XMFLOAT4 ambientLight); void SetDirectionalLight(FXMVECTOR lightVector, XMFLOAT4 lightColour); bool Initialise(); void Render(); void Shutdown(void); private: list* _rootGraph; shared_ptr _subMesh; XMFLOAT4X4 _worldTransformation; XMFLOAT4 _ambientLight; XMFLOAT4 _directionalLightVector; XMFLOAT4 _directionalLightColour; XMFLOAT4 _cameraPosition; ComPtr _device; ComPtr _deviceContext; ComPtr _vertexBuffer; ComPtr _indexBuffer; ComPtr _vertexShaderByteCode = nullptr; ComPtr _pixelShaderByteCode = nullptr; ComPtr _vertexShader; ComPtr _pixelShader; ComPtr _layout; ComPtr _constantBuffer; ComPtr _texture; ComPtr _transparentBlendState; ComPtr _defaultRasteriserState; ComPtr _noCullRasteriserState; CBUFFER _cBuffer; void BuildShaders(); void BuildVertexLayout(); void BuildConstantBuffer(); void BuildBlendState(); void BuildRendererState(); void RenderChild(SceneNodePointer node, bool renderTransparent); };