blob: da9414439d3fa34727862f64060b240a358adfda (
plain) (
blame)
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
|
/*
* Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved.
*
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto. Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA CORPORATION is strictly prohibited.
*/
#ifndef RENDERABLE_H
#define RENDERABLE_H
#include "RenderMaterial.h"
#include <DirectXMath.h>
#include "PxMat44.h"
#include "PxVec3.h"
#include "PxVec4.h"
using namespace physx;
class Renderer;
/**
RenderMesh interface, used by Renderable
*/
class IRenderMesh
{
public:
virtual ~IRenderMesh() {}
virtual const std::vector<D3D11_INPUT_ELEMENT_DESC>& getInputElementDesc() const = 0;
virtual void render(ID3D11DeviceContext& context) const = 0;
};
/**
Renderable, represents single object renderer by Renderer.
Basically Renderable = RenderMaterial + RenderMesh
*/
class Renderable
{
public:
//////// public API ////////
void setMaterial(RenderMaterial& material);
PxMat44 getModelMatrix() const
{
return PxMat44(m_transform) * PxMat44(PxVec4(m_scale, 1));
}
void setTransform(PxTransform& transform)
{
m_transform = transform;
}
const PxTransform& getTransform() const
{
return m_transform;
}
void setScale(PxVec3 scale)
{
m_scale = scale;
}
const PxVec3& getScale() const
{
return m_scale;
}
void setColor(DirectX::XMFLOAT4 color)
{
m_color = color;
}
DirectX::XMFLOAT4 getColor() const
{
return m_color;
}
void setHidden(bool hidden)
{
m_hidden = hidden;
}
bool isHidden() const
{
return m_hidden;
}
bool isTransparent() const
{
return !(m_materialInstance->getMaterial().getBlending() == RenderMaterial::BLEND_NONE);
}
RenderMaterial& getMaterial() const { return m_materialInstance->getMaterial(); }
private:
//////// methods used by Renderer ////////
friend class Renderer;
void render(Renderer& renderer) const
{
render(renderer, false);
}
void renderDepthStencilOnly(Renderer& renderer) const
{
render(renderer, true);
}
Renderable(IRenderMesh& mesh, RenderMaterial& material);
void render(Renderer& renderer, bool depthStencilOnly) const;
//////// internal data ////////
DirectX::XMFLOAT4 m_color;
PxTransform m_transform;
PxVec3 m_scale;
RenderMaterial::InstancePtr m_materialInstance;
IRenderMesh& m_mesh;
bool m_hidden;
};
#endif //RENDERABLE_H
|