cleaning more code

This commit is contained in:
Sam Gateau 2017-11-02 23:35:18 -07:00
parent 421aacd8eb
commit c11f46a8d3
7 changed files with 24 additions and 71 deletions

View file

@ -20,36 +20,33 @@ using namespace render;
CauterizedMeshPartPayload::CauterizedMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform) CauterizedMeshPartPayload::CauterizedMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform)
: ModelMeshPartPayload(model, meshIndex, partIndex, shapeIndex, transform, offsetTransform) {} : ModelMeshPartPayload(model, meshIndex, partIndex, shapeIndex, transform, offsetTransform) {}
void CauterizedMeshPartPayload::updateClusterBuffer(const QVector<glm::mat4>& clusterMatrices, const QVector<glm::mat4>& cauterizedClusterMatrices) { void CauterizedMeshPartPayload::updateClusterBuffer(const std::vector<glm::mat4>& clusterMatrices, const std::vector<glm::mat4>& cauterizedClusterMatrices) {
// Once computed the cluster matrices, update the buffer(s) // Once computed the cluster matrices, update the buffer(s)
if (clusterMatrices.size() > 1) { if (clusterMatrices.size() > 1) {
if (!_clusterBuffer) { if (!_clusterBuffer) {
_clusterBuffer = std::make_shared<gpu::Buffer>(clusterMatrices.size() * sizeof(glm::mat4), _clusterBuffer = std::make_shared<gpu::Buffer>(clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) clusterMatrices.constData()); (const gpu::Byte*) clusterMatrices.data());
} else { } else {
_clusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4), _clusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) clusterMatrices.constData()); (const gpu::Byte*) clusterMatrices.data());
} }
} }
if (cauterizedClusterMatrices.size() > 1) { if (cauterizedClusterMatrices.size() > 1) {
if (!_cauterizedClusterBuffer) { if (!_cauterizedClusterBuffer) {
_cauterizedClusterBuffer = std::make_shared<gpu::Buffer>(cauterizedClusterMatrices.size() * sizeof(glm::mat4), _cauterizedClusterBuffer = std::make_shared<gpu::Buffer>(cauterizedClusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) cauterizedClusterMatrices.constData()); (const gpu::Byte*) cauterizedClusterMatrices.data());
} }
else { else {
_cauterizedClusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4), _cauterizedClusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) clusterMatrices.constData()); (const gpu::Byte*) clusterMatrices.data());
} }
} }
} }
void CauterizedMeshPartPayload::updateTransformForCauterizedMesh( void CauterizedMeshPartPayload::updateTransformForCauterizedMesh(const Transform& renderTransform) {
const Transform& renderTransform,
const gpu::BufferPointer& buffer) {
_cauterizedTransform = renderTransform; _cauterizedTransform = renderTransform;
// _cauterizedClusterBuffer = buffer;
} }
void CauterizedMeshPartPayload::bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const { void CauterizedMeshPartPayload::bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const {

View file

@ -15,9 +15,9 @@ class CauterizedMeshPartPayload : public ModelMeshPartPayload {
public: public:
CauterizedMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform); CauterizedMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform);
void updateClusterBuffer(const QVector<glm::mat4>& clusterMatrices, const QVector<glm::mat4>& cauterizedClusterMatrices); void updateClusterBuffer(const std::vector<glm::mat4>& clusterMatrices, const std::vector<glm::mat4>& cauterizedClusterMatrices);
void updateTransformForCauterizedMesh(const Transform& renderTransform, const gpu::BufferPointer& buffer); void updateTransformForCauterizedMesh(const Transform& renderTransform);
void bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const override; void bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const override;

View file

@ -112,19 +112,6 @@ void CauterizedModel::updateClusterMatrices() {
auto jointMatrix = _rig.getJointTransform(cluster.jointIndex); auto jointMatrix = _rig.getJointTransform(cluster.jointIndex);
glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]); glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]);
} }
/*
// Once computed the cluster matrices, update the buffer(s)
if (mesh.clusters.size() > 1) {
if (!state.clusterBuffer) {
state.clusterBuffer = std::make_shared<gpu::Buffer>(state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
} else {
state.clusterBuffer->setSubData(0, state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
}
}
*/
} }
// as an optimization, don't build cautrizedClusterMatrices if the boneSet is empty. // as an optimization, don't build cautrizedClusterMatrices if the boneSet is empty.
@ -147,17 +134,6 @@ void CauterizedModel::updateClusterMatrices() {
} }
glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]); glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]);
} }
/*
if (!_cauterizeBoneSet.empty() && (state.clusterMatrices.size() > 1)) {
if (!state.clusterBuffer) {
state.clusterBuffer =
std::make_shared<gpu::Buffer>(state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
} else {
state.clusterBuffer->setSubData(0, state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
}
}*/
} }
} }
@ -202,9 +178,6 @@ void CauterizedModel::updateRenderItems() {
modelTransform.setTranslation(self->getTranslation()); modelTransform.setTranslation(self->getTranslation());
modelTransform.setRotation(self->getRotation()); modelTransform.setRotation(self->getRotation());
/* if (!self->isLoaded()) {
return;
}*/
render::Transaction transaction; render::Transaction transaction;
QList<render::ItemID> keys = self->getRenderItems().keys(); QList<render::ItemID> keys = self->getRenderItems().keys();
int meshIndex{ 0 }; int meshIndex{ 0 };
@ -225,13 +198,13 @@ void CauterizedModel::updateRenderItems() {
if (clusterMatrices.size() == 1) { if (clusterMatrices.size() == 1) {
renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0])); renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0]));
} }
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, nullptr); data.updateTransformForSkinnedMesh(renderTransform, modelTransform);
renderTransform = modelTransform; renderTransform = modelTransform;
if (clusterMatricesCauterized.size() == 1) { if (clusterMatricesCauterized.size() == 1) {
renderTransform = modelTransform.worldTransform(Transform(clusterMatricesCauterized[0])); renderTransform = modelTransform.worldTransform(Transform(clusterMatricesCauterized[0]));
} }
data.updateTransformForCauterizedMesh(renderTransform, nullptr); data.updateTransformForCauterizedMesh(renderTransform);
}); });
} }

View file

@ -337,7 +337,7 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in
if (state.clusterMatrices.size() == 1) { if (state.clusterMatrices.size() == 1) {
renderTransform = transform.worldTransform(Transform(state.clusterMatrices[0])); renderTransform = transform.worldTransform(Transform(state.clusterMatrices[0]));
} }
updateTransformForSkinnedMesh(renderTransform, transform, state.clusterBuffer); updateTransformForSkinnedMesh(renderTransform, transform);
initCache(); initCache();
} }
@ -368,26 +368,24 @@ void ModelMeshPartPayload::notifyLocationChanged() {
} }
void ModelMeshPartPayload::updateClusterBuffer(const QVector<glm::mat4>& clusterMatrices) { void ModelMeshPartPayload::updateClusterBuffer(const std::vector<glm::mat4>& clusterMatrices) {
// Once computed the cluster matrices, update the buffer(s) // Once computed the cluster matrices, update the buffer(s)
if (clusterMatrices.size() > 1) { if (clusterMatrices.size() > 1) {
if (!_clusterBuffer) { if (!_clusterBuffer) {
_clusterBuffer = std::make_shared<gpu::Buffer>(clusterMatrices.size() * sizeof(glm::mat4), _clusterBuffer = std::make_shared<gpu::Buffer>(clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) clusterMatrices.constData()); (const gpu::Byte*) clusterMatrices.data());
} }
else { else {
_clusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4), _clusterBuffer->setSubData(0, clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) clusterMatrices.constData()); (const gpu::Byte*) clusterMatrices.data());
} }
} }
} }
void ModelMeshPartPayload::updateTransformForSkinnedMesh(const Transform& renderTransform, const Transform& boundTransform, void ModelMeshPartPayload::updateTransformForSkinnedMesh(const Transform& renderTransform, const Transform& boundTransform) {
const gpu::BufferPointer& buffer) {
_transform = renderTransform; _transform = renderTransform;
_worldBound = _adjustedLocalBound; _worldBound = _adjustedLocalBound;
_worldBound.transform(boundTransform); _worldBound.transform(boundTransform);
// _clusterBuffer = buffer;
} }
ItemKey ModelMeshPartPayload::getKey() const { ItemKey ModelMeshPartPayload::getKey() const {
@ -431,7 +429,6 @@ int ModelMeshPartPayload::getLayer() const {
} }
ShapeKey ModelMeshPartPayload::getShapeKey() const { ShapeKey ModelMeshPartPayload::getShapeKey() const {
// guard against partially loaded meshes // guard against partially loaded meshes
ModelPointer model = _model.lock(); ModelPointer model = _model.lock();
if (!model || !model->isLoaded() || !model->getGeometry()) { if (!model || !model->isLoaded() || !model->getGeometry()) {
@ -597,7 +594,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) {
args->_details._trianglesRendered += _drawPart._numIndices / INDICES_PER_TRIANGLE; args->_details._trianglesRendered += _drawPart._numIndices / INDICES_PER_TRIANGLE;
} }
void ModelMeshPartPayload::computeAdjustedLocalBound(const QVector<glm::mat4>& clusterMatrices) { void ModelMeshPartPayload::computeAdjustedLocalBound(const std::vector<glm::mat4>& clusterMatrices) {
_adjustedLocalBound = _localBound; _adjustedLocalBound = _localBound;
if (clusterMatrices.size() > 0) { if (clusterMatrices.size() > 0) {
_adjustedLocalBound.transform(clusterMatrices[0]); _adjustedLocalBound.transform(clusterMatrices[0]);

View file

@ -87,10 +87,8 @@ public:
typedef Payload::DataPointer Pointer; typedef Payload::DataPointer Pointer;
void notifyLocationChanged() override; void notifyLocationChanged() override;
void updateClusterBuffer(const QVector<glm::mat4>& clusterMatrices); void updateClusterBuffer(const std::vector<glm::mat4>& clusterMatrices);
void updateTransformForSkinnedMesh(const Transform& renderTransform, void updateTransformForSkinnedMesh(const Transform& renderTransform, const Transform& boundTransform);
const Transform& boundTransform,
const gpu::BufferPointer& buffer);
// Render Item interface // Render Item interface
render::ItemKey getKey() const override; render::ItemKey getKey() const override;
@ -104,7 +102,7 @@ public:
void initCache(); void initCache();
void computeAdjustedLocalBound(const QVector<glm::mat4>& clusterMatrices); void computeAdjustedLocalBound(const std::vector<glm::mat4>& clusterMatrices);
gpu::BufferPointer _clusterBuffer; gpu::BufferPointer _clusterBuffer;
ModelWeakPointer _model; ModelWeakPointer _model;

View file

@ -255,7 +255,7 @@ void Model::updateRenderItems() {
if (clusterMatrices.size() == 1) { if (clusterMatrices.size() == 1) {
renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0])); renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0]));
} }
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, nullptr); data.updateTransformForSkinnedMesh(renderTransform, modelTransform);
}); });
} }
} }
@ -313,7 +313,7 @@ bool Model::updateGeometry() {
foreach (const FBXMesh& mesh, fbxGeometry.meshes) { foreach (const FBXMesh& mesh, fbxGeometry.meshes) {
MeshState state; MeshState state;
state.clusterMatrices.resize(mesh.clusters.size()); state.clusterMatrices.resize(mesh.clusters.size());
_meshStates.append(state); _meshStates.push_back(state);
// Note: we add empty buffers for meshes that lack blendshapes so we can access the buffers by index // Note: we add empty buffers for meshes that lack blendshapes so we can access the buffers by index
// later in ModelMeshPayload, however the vast majority of meshes will not have them. // later in ModelMeshPayload, however the vast majority of meshes will not have them.
@ -1138,17 +1138,6 @@ void Model::updateClusterMatrices() {
auto jointMatrix = _rig.getJointTransform(cluster.jointIndex); auto jointMatrix = _rig.getJointTransform(cluster.jointIndex);
glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]); glm_mat4u_mul(jointMatrix, cluster.inverseBindMatrix, state.clusterMatrices[j]);
} }
/* // Once computed the cluster matrices, update the buffer(s)
if (mesh.clusters.size() > 1) {
if (!state.clusterBuffer) {
state.clusterBuffer = std::make_shared<gpu::Buffer>(state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
} else {
state.clusterBuffer->setSubData(0, state.clusterMatrices.size() * sizeof(glm::mat4),
(const gpu::Byte*) state.clusterMatrices.constData());
}
}*/
} }
// post the blender if we're not currently waiting for one to finish // post the blender if we're not currently waiting for one to finish
@ -1332,7 +1321,7 @@ void Model::createCollisionRenderItemSet() {
} }
bool Model::isRenderable() const { bool Model::isRenderable() const {
return !_meshStates.isEmpty() || (isLoaded() && _renderGeometry->getMeshes().empty()); return !_meshStates.empty() || (isLoaded() && _renderGeometry->getMeshes().empty());
} }
class CollisionRenderGeometry : public Geometry { class CollisionRenderGeometry : public Geometry {

View file

@ -246,8 +246,7 @@ public:
class MeshState { class MeshState {
public: public:
QVector<glm::mat4> clusterMatrices; std::vector<glm::mat4> clusterMatrices;
gpu::BufferPointer clusterBuffer;
}; };
const MeshState& getMeshState(int index) { return _meshStates.at(index); } const MeshState& getMeshState(int index) { return _meshStates.at(index); }
@ -317,7 +316,7 @@ protected:
bool _snappedToRegistrationPoint; /// are we currently snapped to a registration point bool _snappedToRegistrationPoint; /// are we currently snapped to a registration point
glm::vec3 _registrationPoint = glm::vec3(0.5f); /// the point in model space our center is snapped to glm::vec3 _registrationPoint = glm::vec3(0.5f); /// the point in model space our center is snapped to
QVector<MeshState> _meshStates; std::vector<MeshState> _meshStates;
virtual void initJointStates(); virtual void initJointStates();