-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEntity.cpp
More file actions
100 lines (83 loc) · 2.49 KB
/
Entity.cpp
File metadata and controls
100 lines (83 loc) · 2.49 KB
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
#include "Entity.h"
#include <d3d11.h>
#include "Mesh.h"
#include "Camera.h"
#include "Material.h"
#include "Vertex.h"
#include "SimpleShader.h"
Entity::Entity(Mesh* incomingMesh, Material* incomingMaterial)
{
mesh = incomingMesh;
material = incomingMaterial;
transform = new Transform();
}
Entity::~Entity()
{
delete transform;
}
Mesh* Entity::GetMesh() const
{
return mesh;
}
Transform* Entity::GetTransform()
{
return transform;
}
class Material* Entity::GetMaterial() const
{
return material;
}
// doesn't involve instanced rendering yet
void Entity::Draw(ID3D11DeviceContext* context, Camera* mainCamera)
{
SimpleVertexShader* vs = material->GetVertexShader();
SimplePixelShader* ps = material->GetPixelShader();
// set the vertex shader data
vs->SetFloat4("colorTint", material->GetColorTint());
vs->SetMatrix4x4("world", transform->GetWorldMatrix());
vs->SetMatrix4x4("view", mainCamera->GetViewMatrix());
vs->SetMatrix4x4("proj", mainCamera->GetProjectionMatrix());
vs->CopyAllBufferData();
ps->SetFloat("shininess", material->GetShininess());
ps->CopyAllBufferData();
ps->SetShaderResourceView("diffuseTexture", material->GetDiffuseTextureWrapper());
if(material->IsNormalMapMaterial())
{
ps->SetShaderResourceView("normalMap", material->GetNormalMapWrapper());
}
ps->SetSamplerState("samplerOptions", material->GetTextureSampler());
UINT stride = sizeof(Vertex);
UINT offset = 0;
// set vertex and index buffers and draw the mesh
context->IASetVertexBuffers(0, 1, mesh->GetVertexBuffer(), &stride, &offset);
context->IASetIndexBuffer(mesh->GetIndexBuffer(), DXGI_FORMAT_R32_UINT, 0);
context->DrawIndexed
(
mesh->GetIndexCount(),
0,
0
);
}
void Entity::DrawTransparent(struct ID3D11DeviceContext* context, class Camera* mainCamera)
{
SimpleVertexShader* vs = material->GetVertexShader();
SimplePixelShader* ps = material->GetPixelShader();
// set the vertex shader data
vs->SetMatrix4x4("world", transform->GetWorldMatrix());
vs->SetMatrix4x4("view", mainCamera->GetViewMatrix());
vs->SetMatrix4x4("proj", mainCamera->GetProjectionMatrix());
vs->CopyAllBufferData();
ps->SetFloat4("colorAndAlpha", material->GetColorTint());
ps->CopyAllBufferData();
UINT stride = sizeof(Vertex);
UINT offset = 0;
// set vertex and index buffers and draw the mesh
context->IASetVertexBuffers(0, 1, mesh->GetVertexBuffer(), &stride, &offset);
context->IASetIndexBuffer(mesh->GetIndexBuffer(), DXGI_FORMAT_R32_UINT, 0);
context->DrawIndexed
(
mesh->GetIndexCount(),
0,
0
);
}