mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-15 18:06:42 +02:00
Yes
This commit is contained in:
parent
70134d67eb
commit
421aacd8eb
3 changed files with 16 additions and 78 deletions
|
@ -186,7 +186,7 @@ void CauterizedModel::updateRenderItems() {
|
|||
// the application will ensure only the last lambda is actually invoked.
|
||||
void* key = (void*)this;
|
||||
std::weak_ptr<CauterizedModel> weakSelf = std::dynamic_pointer_cast<CauterizedModel>(shared_from_this());
|
||||
AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [weakSelf, scale]() {
|
||||
AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [weakSelf]() {
|
||||
// do nothing, if the model has already been destroyed.
|
||||
auto self = weakSelf.lock();
|
||||
if (!self) {
|
||||
|
@ -202,19 +202,12 @@ void CauterizedModel::updateRenderItems() {
|
|||
modelTransform.setTranslation(self->getTranslation());
|
||||
modelTransform.setRotation(self->getRotation());
|
||||
|
||||
Transform scaledModelTransform(modelTransform);
|
||||
scaledModelTransform.setScale(scale);
|
||||
|
||||
uint32_t deleteGeometryCounter = self->getGeometryCounter();
|
||||
|
||||
if (!self->isLoaded()) {
|
||||
/* if (!self->isLoaded()) {
|
||||
return;
|
||||
}
|
||||
}*/
|
||||
render::Transaction transaction;
|
||||
QList<render::ItemID> keys = self->getRenderItems().keys();
|
||||
int meshIndex{ 0 };
|
||||
//foreach (auto itemID, keys) {
|
||||
// for (auto itemID : self->_modelMeshRenderItemIDs) {
|
||||
for (int i = 0; i < self->_modelMeshRenderItemIDs.size(); i++) {
|
||||
auto itemID = self->_modelMeshRenderItemIDs[i];
|
||||
auto meshIndex = self->_modelMeshRenderItemShapes[i].meshIndex;
|
||||
|
@ -224,46 +217,22 @@ void CauterizedModel::updateRenderItems() {
|
|||
const Model::MeshState& cState = self->getCauterizeMeshState(meshIndex);
|
||||
auto clusterMatricesCauterized(cState.clusterMatrices);
|
||||
|
||||
transaction.updateItem<CauterizedMeshPartPayload>(itemID, [modelTransform, deleteGeometryCounter, clusterMatrices, clusterMatricesCauterized](CauterizedMeshPartPayload& data) {
|
||||
// ModelPointer model = data._model.lock();
|
||||
// if (model && model->isLoaded()) {
|
||||
// Ensure the model geometry was not reset between frames
|
||||
// if (deleteGeometryCounter == model->getGeometryCounter()) {
|
||||
data.updateClusterBuffer(clusterMatrices, clusterMatricesCauterized);
|
||||
transaction.updateItem<CauterizedMeshPartPayload>(itemID,
|
||||
[modelTransform, clusterMatrices, clusterMatricesCauterized](CauterizedMeshPartPayload& data) {
|
||||
data.updateClusterBuffer(clusterMatrices, clusterMatricesCauterized);
|
||||
|
||||
// this stuff identical to what happens in regular Model
|
||||
/*const Model::MeshState& state = model->getMeshState(data._meshIndex);
|
||||
Transform renderTransform = modelTransform;
|
||||
if (state.clusterMatrices.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(state.clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, state.clusterBuffer);
|
||||
*/
|
||||
Transform renderTransform = modelTransform;
|
||||
if (clusterMatrices.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, nullptr);
|
||||
Transform renderTransform = modelTransform;
|
||||
if (clusterMatrices.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, nullptr);
|
||||
|
||||
|
||||
// this stuff for cauterized mesh
|
||||
/*CauterizedModel* cModel = static_cast<CauterizedModel*>(model.get());
|
||||
const Model::MeshState& cState = cModel->getCauterizeMeshState(data._meshIndex);
|
||||
renderTransform = modelTransform;
|
||||
if (cState.clusterMatrices.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(cState.clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForCauterizedMesh(renderTransform, cState.clusterBuffer);
|
||||
*/
|
||||
renderTransform = modelTransform;
|
||||
if (clusterMatricesCauterized.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(clusterMatricesCauterized[0]));
|
||||
}
|
||||
data.updateTransformForCauterizedMesh(renderTransform, nullptr);
|
||||
// }
|
||||
// }
|
||||
renderTransform = modelTransform;
|
||||
if (clusterMatricesCauterized.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(clusterMatricesCauterized[0]));
|
||||
}
|
||||
data.updateTransformForCauterizedMesh(renderTransform, nullptr);
|
||||
});
|
||||
meshIndex++;
|
||||
}
|
||||
|
||||
scene->enqueueTransaction(transaction);
|
||||
|
|
|
@ -241,31 +241,14 @@ void Model::updateRenderItems() {
|
|||
uint32_t deleteGeometryCounter = self->_deleteGeometryCounter;
|
||||
|
||||
render::Transaction transaction;
|
||||
// foreach (auto itemID, self->_modelMeshRenderItemsMap.keys()) {
|
||||
// for (auto itemID : self->_modelMeshRenderItemIDs) {
|
||||
for (int i = 0; i < self->_modelMeshRenderItemIDs.size(); i++) {
|
||||
auto itemID = self->_modelMeshRenderItemIDs[i];
|
||||
auto meshIndex = self->_modelMeshRenderItemShapes[i].meshIndex;
|
||||
if (self && self->isLoaded()) {
|
||||
//int meshIndex = std::dynamic_pointer_cast<ModelMeshPartPayload>(self->_modelMeshRenderItemsMap[itemID])->_meshIndex;
|
||||
// int meshIndex = std::dynamic_pointer_cast<ModelMeshPartPayload>(self->_modelMeshRenderItemsMap[itemID])->_meshIndex;
|
||||
const Model::MeshState& state = self->getMeshState(meshIndex);
|
||||
auto clusterMatrices(state.clusterMatrices);
|
||||
|
||||
transaction.updateItem<ModelMeshPartPayload>(itemID, [deleteGeometryCounter, modelTransform, clusterMatrices](ModelMeshPartPayload& data) {
|
||||
// ModelPointer model = data._model.lock();
|
||||
// if (model && model->isLoaded()) {
|
||||
// Ensure the model geometry was not reset between frames
|
||||
// if (deleteGeometryCounter == model->_deleteGeometryCounter) {
|
||||
|
||||
/*const Model::MeshState& state = model->getMeshState(data._meshIndex);
|
||||
Transform renderTransform = modelTransform;
|
||||
if (state.clusterMatrices.size() == 1) {
|
||||
renderTransform = modelTransform.worldTransform(Transform(state.clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, state.clusterBuffer);
|
||||
*/
|
||||
|
||||
data.updateClusterBuffer(clusterMatrices);
|
||||
|
||||
Transform renderTransform = modelTransform;
|
||||
|
@ -273,9 +256,6 @@ void Model::updateRenderItems() {
|
|||
renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0]));
|
||||
}
|
||||
data.updateTransformForSkinnedMesh(renderTransform, modelTransform, nullptr);
|
||||
|
||||
// }
|
||||
// }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,17 +60,6 @@ void SoftAttachmentModel::updateClusterMatrices() {
|
|||
}
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue