MeshComponent.cpp 1.3 KB

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