| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // ----------------------------------------------------------------
- // From Game Programming in C++ by Sanjay Madhav
- // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
- //
- // Released under the BSD License
- // See LICENSE in root directory for full details.
- // ----------------------------------------------------------------
- #include "MeshComponent.h"
- #include "Shader.h"
- #include "Mesh.h"
- #include "Actor.h"
- #include "Game.h"
- #include "Renderer.h"
- #include "Texture.h"
- #include "VertexArray.h"
- MeshComponent::MeshComponent(Actor* owner)
- :Component(owner)
- ,mMesh(nullptr)
- ,mTextureIndex(0)
- ,mVisible(true)
- {
- mOwner->GetGame()->GetRenderer()->AddMeshComp(this);
- }
- MeshComponent::~MeshComponent()
- {
- mOwner->GetGame()->GetRenderer()->RemoveMeshComp(this);
- }
- void MeshComponent::Draw(Shader* shader)
- {
- if (mMesh)
- {
- // Set the world transform
- shader->SetMatrixUniform("uWorldTransform",
- mOwner->GetWorldTransform());
- // Set specular power
- shader->SetFloatUniform("uSpecPower", mMesh->GetSpecPower());
- // Set the active texture
- Texture* t = mMesh->GetTexture(mTextureIndex);
- if (t)
- {
- t->SetActive();
- }
- // Set the mesh's vertex array as active
- VertexArray* va = mMesh->GetVertexArray();
- va->SetActive();
- // Draw
- glDrawElements(GL_TRIANGLES, va->GetNumIndices(), GL_UNSIGNED_INT, nullptr);
- }
- }
|