Start drawing models before we get the textures

This commit is contained in:
Atlante45 2017-04-25 16:29:36 -07:00
parent e4c21627f9
commit a2f7a88433
2 changed files with 21 additions and 14 deletions

View file

@ -118,7 +118,7 @@ void MeshPartPayload::drawCall(gpu::Batch& batch) const {
batch.drawIndexed(gpu::TRIANGLES, _drawPart._numIndices, _drawPart._startIndex); batch.drawIndexed(gpu::TRIANGLES, _drawPart._numIndices, _drawPart._startIndex);
} }
void MeshPartPayload::bindMesh(gpu::Batch& batch) const { void MeshPartPayload::bindMesh(gpu::Batch& batch) {
batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0); batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0);
batch.setInputFormat((_drawMesh->getVertexFormat())); batch.setInputFormat((_drawMesh->getVertexFormat()));
@ -255,7 +255,7 @@ void MeshPartPayload::bindTransform(gpu::Batch& batch, const ShapePipeline::Loca
} }
void MeshPartPayload::render(RenderArgs* args) const { void MeshPartPayload::render(RenderArgs* args) {
PerformanceTimer perfTimer("MeshPartPayload::render"); PerformanceTimer perfTimer("MeshPartPayload::render");
gpu::Batch& batch = *(args->_batch); gpu::Batch& batch = *(args->_batch);
@ -485,7 +485,7 @@ ShapeKey ModelMeshPartPayload::getShapeKey() const {
return builder.build(); return builder.build();
} }
void ModelMeshPartPayload::bindMesh(gpu::Batch& batch) const { void ModelMeshPartPayload::bindMesh(gpu::Batch& batch) {
if (!_isBlendShaped) { if (!_isBlendShaped) {
batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0); batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0);
@ -517,7 +517,7 @@ void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, const ShapePipeline:
batch.setModelTransform(_transform); batch.setModelTransform(_transform);
} }
float ModelMeshPartPayload::computeFadeAlpha() const { float ModelMeshPartPayload::computeFadeAlpha() {
if (_fadeState == FADE_WAITING_TO_START) { if (_fadeState == FADE_WAITING_TO_START) {
return 0.0f; return 0.0f;
} }
@ -536,7 +536,7 @@ float ModelMeshPartPayload::computeFadeAlpha() const {
return Interpolate::simpleNonLinearBlend(fadeAlpha); return Interpolate::simpleNonLinearBlend(fadeAlpha);
} }
void ModelMeshPartPayload::render(RenderArgs* args) const { void ModelMeshPartPayload::render(RenderArgs* args) {
PerformanceTimer perfTimer("ModelMeshPartPayload::render"); PerformanceTimer perfTimer("ModelMeshPartPayload::render");
if (!_model->addedToScene() || !_model->isVisible()) { if (!_model->addedToScene() || !_model->isVisible()) {
@ -544,7 +544,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) const {
} }
if (_fadeState == FADE_WAITING_TO_START) { if (_fadeState == FADE_WAITING_TO_START) {
if (_model->isLoaded() && _model->getGeometry()->areTexturesLoaded()) { if (_model->isLoaded()) {
if (EntityItem::getEntitiesShouldFadeFunction()()) { if (EntityItem::getEntitiesShouldFadeFunction()()) {
_fadeStartTime = usecTimestampNow(); _fadeStartTime = usecTimestampNow();
_fadeState = FADE_IN_PROGRESS; _fadeState = FADE_IN_PROGRESS;
@ -557,6 +557,12 @@ void ModelMeshPartPayload::render(RenderArgs* args) const {
} }
} }
if (_materialNeedsUpdate && _model->getGeometry()->areTexturesLoaded()) {
qDebug() << "Updating for textures";
_model->setRenderItemsNeedUpdate();
_materialNeedsUpdate = false;
}
if (!args) { if (!args) {
return; return;
} }

View file

@ -46,11 +46,11 @@ public:
virtual render::ItemKey getKey() const; virtual render::ItemKey getKey() const;
virtual render::Item::Bound getBound() const; virtual render::Item::Bound getBound() const;
virtual render::ShapeKey getShapeKey() const; // shape interface virtual render::ShapeKey getShapeKey() const; // shape interface
virtual void render(RenderArgs* args) const; virtual void render(RenderArgs* args);
// ModelMeshPartPayload functions to perform render // ModelMeshPartPayload functions to perform render
void drawCall(gpu::Batch& batch) const; void drawCall(gpu::Batch& batch) const;
virtual void bindMesh(gpu::Batch& batch) const; virtual void bindMesh(gpu::Batch& batch);
virtual void bindMaterial(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, bool enableTextures) const; virtual void bindMaterial(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, bool enableTextures) const;
virtual void bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const; virtual void bindTransform(gpu::Batch& batch, const render::ShapePipeline::LocationsPointer locations, RenderArgs::RenderMode renderMode) const;
@ -93,16 +93,16 @@ public:
const Transform& boundTransform, const Transform& boundTransform,
const gpu::BufferPointer& buffer); const gpu::BufferPointer& buffer);
float computeFadeAlpha() const; float computeFadeAlpha();
// Render Item interface // Render Item interface
render::ItemKey getKey() const override; render::ItemKey getKey() const override;
int getLayer() const; int getLayer() const;
render::ShapeKey getShapeKey() const override; // shape interface render::ShapeKey getShapeKey() const override; // shape interface
void render(RenderArgs* args) const override; void render(RenderArgs* args) override;
// ModelMeshPartPayload functions to perform render // ModelMeshPartPayload functions to perform render
void bindMesh(gpu::Batch& batch) const override; void bindMesh(gpu::Batch& batch) override;
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;
void initCache(); void initCache();
@ -116,11 +116,12 @@ public:
int _shapeID; int _shapeID;
bool _isSkinned{ false }; bool _isSkinned{ false };
bool _isBlendShaped{ false }; bool _isBlendShaped { false };
bool _materialNeedsUpdate { true };
private: private:
mutable quint64 _fadeStartTime { 0 }; quint64 _fadeStartTime { 0 };
mutable uint8_t _fadeState { FADE_WAITING_TO_START }; uint8_t _fadeState { FADE_WAITING_TO_START };
}; };
namespace render { namespace render {