Matrix nodeModelViewMatrix(false);
bool nodeModelViewMatrixSet(false);
- if(cull && renderable.mRenderer && !renderable.mRenderer->GetShader().HintEnabled(Dali::Shader::Hint::MODIFIES_GEOMETRY) && node->GetClippingMode() == ClippingMode::DISABLED)
+ // Don't cull items which have render callback
+ bool hasRenderCallback = (renderable.mRenderer && renderable.mRenderer->GetRenderCallback());
+
+ if(cull && renderable.mRenderer && (hasRenderCallback || (!renderable.mRenderer->GetShader().HintEnabled(Dali::Shader::Hint::MODIFIES_GEOMETRY) && node->GetClippingMode() == ClippingMode::DISABLED)))
{
const Vector4& boundingSphere = node->GetBoundingSphere();
inside = (boundingSphere.w > Math::MACHINE_EPSILON_1000) &&
if(inside)
{
- Renderer::OpacityType opacityType = renderable.mRenderer ? renderable.mRenderer->GetOpacityType(updateBufferIndex, *node) : Renderer::OPAQUE;
+ bool skipRender(false);
+ bool isOpaque = true;
+ if(!hasRenderCallback)
+ {
+ Renderer::OpacityType opacityType = renderable.mRenderer ? renderable.mRenderer->GetOpacityType(updateBufferIndex, *node) : Renderer::OPAQUE;
+
+ // We can skip render when node is not clipping and transparent
+ skipRender = (opacityType == Renderer::TRANSPARENT && node->GetClippingMode() == ClippingMode::DISABLED);
+
+ isOpaque = (opacityType == Renderer::OPAQUE);
+ }
- // We can skip render when node is not clipping and transparent
- const bool skipRender(opacityType == Renderer::TRANSPARENT && node->GetClippingMode() == ClippingMode::DISABLED);
if(!skipRender)
{
// Get the next free RenderItem.
auto& partialRenderingCacheInfo = node->GetPartialRenderingData().GetCurrentCacheInfo();
partialRenderingCacheInfo.node = node;
- partialRenderingCacheInfo.isOpaque = (opacityType == Renderer::OPAQUE);
+ partialRenderingCacheInfo.isOpaque = isOpaque;
partialRenderingCacheInfo.renderer = renderable.mRenderer;
partialRenderingCacheInfo.color = node->GetWorldColor(updateBufferIndex);
partialRenderingCacheInfo.depthIndex = node->GetDepthIndex();
}
item.mNode = node;
- item.mIsOpaque = (opacityType == Renderer::OPAQUE);
+ item.mIsOpaque = isOpaque;
item.mColor = node->GetColor(updateBufferIndex);
item.mDepthIndex = 0;