MeshComponent.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // ----------------------------------------------------------------
  2. // From Game Programming in C++ by Sanjay Madhav
  3. // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
  4. //
  5. // Released under the BSD License
  6. // See LICENSE in root directory for full details.
  7. // ----------------------------------------------------------------
  8. #include "MeshComponent.h"
  9. #include "Shader.h"
  10. #include "Mesh.h"
  11. #include "Actor.h"
  12. #include "Game.h"
  13. #include "Renderer.h"
  14. #include "Texture.h"
  15. #include "VertexArray.h"
  16. MeshComponent::MeshComponent(Actor* owner)
  17. :Component(owner)
  18. ,mMesh(nullptr)
  19. ,mTextureIndex(0)
  20. {
  21. mOwner->GetGame()->GetRenderer()->AddMeshComp(this);
  22. }
  23. MeshComponent::~MeshComponent()
  24. {
  25. mOwner->GetGame()->GetRenderer()->RemoveMeshComp(this);
  26. }
  27. void MeshComponent::Draw(Shader* shader)
  28. {
  29. if (mMesh)
  30. {
  31. // Set the world transform
  32. shader->SetMatrixUniform("uWorldTransform",
  33. mOwner->GetWorldTransform());
  34. // Set specular power
  35. shader->SetFloatUniform("uSpecPower", mMesh->GetSpecPower());
  36. // Set the active texture
  37. Texture* t = mMesh->GetTexture(mTextureIndex);
  38. if (t)
  39. {
  40. t->SetActive();
  41. }
  42. // Set the mesh's vertex array as active
  43. VertexArray* va = mMesh->GetVertexArray();
  44. va->SetActive();
  45. // Draw
  46. glDrawElements(GL_TRIANGLES, va->GetNumIndices(), GL_UNSIGNED_INT, nullptr);
  47. }
  48. }