MeshComponent.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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, bool isSkeletal)
  17. :Component(owner)
  18. ,mMesh(nullptr)
  19. ,mTextureIndex(0)
  20. ,mVisible(true)
  21. ,mIsSkeletal(isSkeletal)
  22. {
  23. mOwner->GetGame()->GetRenderer()->AddMeshComp(this);
  24. }
  25. MeshComponent::~MeshComponent()
  26. {
  27. mOwner->GetGame()->GetRenderer()->RemoveMeshComp(this);
  28. }
  29. void MeshComponent::Draw(Shader* shader)
  30. {
  31. if (mMesh)
  32. {
  33. // Set the world transform
  34. shader->SetMatrixUniform("uWorldTransform",
  35. mOwner->GetWorldTransform());
  36. // Set specular power
  37. shader->SetFloatUniform("uSpecPower", mMesh->GetSpecPower());
  38. // Set the active texture
  39. Texture* t = mMesh->GetTexture(mTextureIndex);
  40. if (t)
  41. {
  42. t->SetActive();
  43. }
  44. // Set the mesh's vertex array as active
  45. VertexArray* va = mMesh->GetVertexArray();
  46. va->SetActive();
  47. // Draw
  48. glDrawElements(GL_TRIANGLES, va->GetNumIndices(), GL_UNSIGNED_INT, nullptr);
  49. }
  50. }