Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Mours <pmours@nvidia.com>2022-06-01 16:26:55 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-06-03 19:56:30 +0300
commit34f94a02f37005210f629f04635c457d98ff5f91 (patch)
tree4339231acf82070c1e8c6f1c71f52640eb069dd8 /intern/cycles/hydra/render_buffer.cpp
parent7f7ed8e0989d3c6a3078404567e7da419d6f92f5 (diff)
Fix use of OpenGL interop breaking in Hydra viewports that do not support it
Rendering directly to a resource using OpenGL interop and Hgi doesn't work in Houdini, since it never uses the resulting resource (it does not call `HdRenderBuffer::GetResource`). But since doing that simultaneously disables mapping (`HdRenderBuffer::Map` is not implemented then), nothing was displayed. To fix this, keep track of whether a Hydra viewport does support displaying a Hgi resource directly, by checking whether `HdRenderBuffer::GetResource` is ever called and only enable use of OpenGL interop if that is the case. Differential Revision: https://developer.blender.org/D15090
Diffstat (limited to 'intern/cycles/hydra/render_buffer.cpp')
-rw-r--r--intern/cycles/hydra/render_buffer.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/intern/cycles/hydra/render_buffer.cpp b/intern/cycles/hydra/render_buffer.cpp
index 4867def0624..4d8b21d1e61 100644
--- a/intern/cycles/hydra/render_buffer.cpp
+++ b/intern/cycles/hydra/render_buffer.cpp
@@ -35,7 +35,7 @@ bool HdCyclesRenderBuffer::Allocate(const GfVec3i &dimensions, HdFormat format,
return false;
}
- const size_t oldSize = _data.size();
+ const size_t oldSize = _dataSize;
const size_t newSize = dimensions[0] * dimensions[1] * HdDataSizeOfFormat(format);
if (oldSize == newSize) {
return true;
@@ -49,8 +49,8 @@ bool HdCyclesRenderBuffer::Allocate(const GfVec3i &dimensions, HdFormat format,
_width = dimensions[0];
_height = dimensions[1];
_format = format;
-
- _data.resize(newSize);
+ _dataSize = newSize;
+ _resourceUsed = false;
return true;
}
@@ -63,6 +63,7 @@ void HdCyclesRenderBuffer::_Deallocate()
_data.clear();
_data.shrink_to_fit();
+ _dataSize = 0;
_resource = VtValue();
}
@@ -74,6 +75,10 @@ void *HdCyclesRenderBuffer::Map()
return nullptr;
}
+ if (_data.size() != _dataSize) {
+ _data.resize(_dataSize);
+ }
+
++_mapped;
return _data.data();
@@ -103,10 +108,17 @@ void HdCyclesRenderBuffer::SetConverged(bool converged)
_converged = converged;
}
+bool HdCyclesRenderBuffer::IsResourceUsed() const
+{
+ return _resourceUsed;
+}
+
VtValue HdCyclesRenderBuffer::GetResource(bool multiSampled) const
{
TF_UNUSED(multiSampled);
+ _resourceUsed = true;
+
return _resource;
}