* @param[in] item The current RenderItem about to be rendered
* @param[in,out] commandBuffer The command buffer to write into
* @param[in] instruction The render-instruction to process.
+ * @param[in] orientation The Scene's surface orientation.
*/
inline void RenderAlgorithms::SetupScissorClipping(
const RenderItem& item,
Graphics::CommandBuffer& commandBuffer,
- const RenderInstruction& instruction)
+ const RenderInstruction& instruction,
+ int orientation)
{
// Get the number of child scissors in the stack (do not include layer or root box).
size_t childStackDepth = mScissorStack.size() - 1u;
{
useScissorBox.y = (instruction.mFrameBuffer->GetHeight() - useScissorBox.height) - useScissorBox.y;
}
- Graphics::Rect2D scissorBox = {useScissorBox.x, useScissorBox.y, uint32_t(useScissorBox.width), uint32_t(useScissorBox.height)};
- commandBuffer.SetScissor(scissorBox);
+
+ Graphics::Viewport graphicsViewport = ViewportFromClippingBox(mViewportRectangle, 0);
+ commandBuffer.SetScissor(Rect2DFromClippingBox(useScissorBox, orientation, graphicsViewport));
}
}
}
uint32_t& lastClippingDepth,
uint32_t& lastClippingId,
Integration::StencilBufferAvailable stencilBufferAvailable,
- const RenderInstruction& instruction)
+ const RenderInstruction& instruction,
+ int orientation)
{
RenderMode::Type renderMode = RenderMode::AUTO;
const Renderer* renderer = item.mRenderer;
// As both scissor and stencil clips can be nested, we may be simultaneously traversing up the scissor tree, requiring a scissor to be un-done. Whilst simultaneously adding a new stencil clip.
// We process both based on our current and old clipping depths for each mode.
// Both methods with return rapidly if there is nothing to be done for that type of clipping.
- SetupScissorClipping(item, commandBuffer, instruction);
+ SetupScissorClipping(item, commandBuffer, instruction, orientation);
if(stencilBufferAvailable == Integration::StencilBufferAvailable::TRUE)
{
// Set up clipping based on both the Renderer and Actor APIs.
// The Renderer API will be used if specified. If AUTO, the Actors automatic clipping feature will be used.
- SetupClipping(item, secondaryCommandBuffer, usedStencilBuffer, lastClippingDepth, lastClippingId, stencilBufferAvailable, instruction);
+ SetupClipping(item, secondaryCommandBuffer, usedStencilBuffer, lastClippingDepth, lastClippingId, stencilBufferAvailable, instruction, orientation);
if(DALI_LIKELY(item.mRenderer))
{
* @param[in] boundTextures The textures bound for rendering
* @param[in] viewport The viewport for drawing
* @param[in] rootClippingRect The clipping rectangle
- * @param[in] orientation The surface orientation
+ * @param[in] orientation The Scene's surface orientation.
*/
void ProcessRenderInstruction(const SceneGraph::RenderInstruction& instruction,
BufferIndex bufferIndex,
* @param[in] commandBuffer The command buffer to write into
* @param[in] instruction The render-instruction to process.
+ * @param[in] orientation The Scene's surface orientation.
*/
inline void SetupScissorClipping(
const Dali::Internal::SceneGraph::RenderItem& item,
Graphics::CommandBuffer& commandBuffer,
- const Dali::Internal::SceneGraph::RenderInstruction& instruction);
+ const Dali::Internal::SceneGraph::RenderInstruction& instruction,
+ int orientation);
/**
* @brief Set up the clipping based on the specified clipping settings.
* @param[in/out] lastClippingId The clipping ID of the last renderer drawn. Used by the clipping feature.
* @param[in] stencilBufferAvailable Whether the stencil buffer is available
* @param[in] instruction The render-instruction to process.
+ * @param[in] orientation The Scene's surface orientation.
*/
inline void SetupClipping(const Dali::Internal::SceneGraph::RenderItem& item,
Graphics::CommandBuffer& commandBuffer,
uint32_t& lastClippingDepth,
uint32_t& lastClippingId,
Integration::StencilBufferAvailable stencilBufferAvailable,
- const Dali::Internal::SceneGraph::RenderInstruction& instruction);
+ const Dali::Internal::SceneGraph::RenderInstruction& instruction,
+ int orientation);
/**
* @brief Process a render-list.