Add a read lock where we think it s needed and banging my head on the problem

This commit is contained in:
Sam Gateau 2019-09-16 18:06:43 -07:00
parent 3ec812d5c3
commit 18226e64f8
4 changed files with 7 additions and 13 deletions

View file

@ -108,15 +108,6 @@ protected:
virtual void setIsVisibleInSecondaryCamera(bool value) { _isVisibleInSecondaryCamera = value; }
virtual void setRenderLayer(RenderLayer value) { _renderLayer = value; }
virtual void setPrimitiveMode(PrimitiveMode value) { _primitiveMode = value; }
template <typename F, typename T>
T withReadLockResult(const std::function<T()>& f) {
T result;
withReadLock([&] {
result = f();
});
return result;
}
signals:
void requestRenderUpdate();

View file

@ -1431,12 +1431,13 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce
}
}
if (!_texturesLoaded && model->getGeometry() && model->getGeometry()->areTexturesLoaded()) {
bool currentTexturesLoaded = resultWithReadLock<bool>([&] { return _texturesLoaded; });
if (!currentTexturesLoaded && model->getGeometry() && model->getGeometry()->areTexturesLoaded()) {
withWriteLock([&] {
_texturesLoaded = true;
});
model->updateRenderItems();
} else if (!_texturesLoaded) {
} else if (!currentTexturesLoaded) {
emit requestRenderUpdate();
}

View file

@ -210,7 +210,7 @@ public:
break;
};
}
AlphaMapMode getAlphaMapMode() const { return (_flags[OPACITY_MASK_MAP_BIT] ? ALPHA_MAP_MASK : (_flags[OPACITY_TRANSLUCENT_MAP_BIT] ? ALPHA_MAP_BLEND : ALPHA_MAP_OPAQUE)); }
AlphaMapMode getAlphaMapMode() const { return (isOpacityMaskMap() ? ALPHA_MAP_MASK : (isTranslucentMap() ? ALPHA_MAP_BLEND : ALPHA_MAP_OPAQUE)); }
bool isTranslucent() const { return isTranslucentFactor() || isTranslucentMap(); }
bool isOpaque() const { return !isTranslucent(); }

View file

@ -176,14 +176,16 @@ void RenderThread::renderFrame(gpu::FramePointer& frame) {
#ifdef USE_GL
static gpu::BatchPointer batch = nullptr;
float scale = 1.0;
if (!batch) {
batch = std::make_shared<gpu::Batch>();
batch->setPipeline(_presentPipeline);
batch->setFramebuffer(nullptr);
batch->setResourceTexture(0, frame->framebuffer->getRenderBuffer(0));
batch->setViewportTransform(ivec4(uvec2(0), ivec2(0.5 * fboSize.x, 0.5*fboSize.y)));
batch->setViewportTransform(ivec4(uvec2(0), ivec2(scale * fboSize.x, scale * fboSize.y)));
batch->draw(gpu::TRIANGLE_STRIP, 4);
}
glDisable(GL_FRAMEBUFFER_SRGB);
_gpuContext->executeBatch(*batch);
//glDisable(GL_FRAMEBUFFER_SRGB);