Skip to content

Commit

Permalink
mesh render refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
vadimvinokurov committed Aug 23, 2022
1 parent 76a7e92 commit 6fc1f98
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 17 deletions.
6 changes: 3 additions & 3 deletions Content/Shaders/default.vert
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

in vec3 aPosition;
in vec3 aNormals;
in vec2 aTextCoord;
layout(location = 0) in vec3 aPosition;
layout(location = 1) in vec3 aNormals;
layout(location = 2) in vec2 aTextCoord;

out vec2 fTextCoord;
void main() {
Expand Down
1 change: 1 addition & 0 deletions Sources/AssetImporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ SkeletalMesh AssetImporter::loadSkeletalMesh()
skeletalMeshElement->indices.push_back(Face.mIndices[1]);
skeletalMeshElement->indices.push_back(Face.mIndices[2]);
}
skeletalMeshElement->updateRenderData();
skeletalMeshes.addSkeletalMeshElement(skeletalMeshElement);
}
return skeletalMeshes;
Expand Down
11 changes: 3 additions & 8 deletions Sources/SkeletalMeshElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,9 @@ struct SkeletalMeshElement
std::vector<IVector4> influenceBoneIndices;
std::vector<Vector4> influenceBoneWeight;
SkeletalMeshRenderData renderData;

void updateRenderData() {
renderData.vertices.set(vertices);
renderData.normals.set(normals);
renderData.textureCoordinate.set(textureCoordinates);
renderData.indices.set(indices);
renderData.influenceBoneIndices.set(influenceBoneIndices);
renderData.influenceBoneWeight.set(influenceBoneWeight);
void updateRenderData()
{
renderData.loadMesh(*this);
}
};

Expand Down
20 changes: 20 additions & 0 deletions Sources/SkeletalMeshRenderData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,41 @@
//

#include "SkeletalMeshRenderData.h"
#include "SkeletalMeshElement.h"
#include "Render/opengl_glad.h"

SkeletalMeshRenderData::SkeletalMeshRenderData()
{
glGenVertexArrays(1, &VAO);

bind();
vertices.attachToAttribute(0);
textureCoordinate.attachToAttribute(2);
indices.attachToShader();
unbind();
}

SkeletalMeshRenderData::~SkeletalMeshRenderData()
{
glDeleteVertexArrays(1, &VAO);
}

void SkeletalMeshRenderData::bind()
{
glBindVertexArray(VAO);
}

void SkeletalMeshRenderData::unbind()
{
glBindVertexArray(0);
}

void SkeletalMeshRenderData::loadMesh(const SkeletalMeshElement& skeletalMesh)
{
vertices.set(skeletalMesh.vertices);
normals.set(skeletalMesh.normals);
textureCoordinate.set(skeletalMesh.textureCoordinates);
indices.set(skeletalMesh.indices);
influenceBoneIndices.set(skeletalMesh.influenceBoneIndices);
influenceBoneWeight.set(skeletalMesh.influenceBoneWeight);
}
4 changes: 4 additions & 0 deletions Sources/SkeletalMeshRenderData.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include "Render/ObjectBuffer.h"
#include "Render/IndexBuffer.h"

class SkeletalMeshElement;

struct SkeletalMeshRenderData
{
SkeletalMeshRenderData();
Expand All @@ -22,6 +24,8 @@ struct SkeletalMeshRenderData
void bind();
void unbind();

void loadMesh(const SkeletalMeshElement& skeletalMesh);

Render::ObjectBuffer<Vector3> vertices;
Render::ObjectBuffer<Vector3> normals;
Render::ObjectBuffer<Vector2> textureCoordinate;
Expand Down
6 changes: 0 additions & 6 deletions Sources/Systems/RenderSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,6 @@ void RenderSystem::updateSceletalMeshComponent(SkeletalMeshComponent *skeletalMe
{
auto &shader = materials[i]->shader;
shader->bind();
meshElements[i]->renderData.bind();
meshElements[i]->updateRenderData();
meshElements[i]->renderData.vertices.attachToAttribute(shader->getAttribute("aPosition"));
meshElements[i]->renderData.textureCoordinate.attachToAttribute(shader->getAttribute("aTextCoord"));
meshElements[i]->renderData.indices.attachToShader();
meshElements[i]->renderData.unbind();

for (auto &texture : materials[i]->textures)
{
Expand Down

0 comments on commit 6fc1f98

Please sign in to comment.