1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
# Copyright (c) 2015 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher.
from typing import Optional
from UM.SortedList import SortedListWithKey
MYPY = False
if MYPY:
from UM.View.RenderPass import RenderPass
from UM.Scene.SceneNode import SceneNode
## Abstract base class for different rendering implementations.
#
# The renderer is used to perform rendering of objects. It abstracts away any
# details about the underlying graphics API that is used to render. It is designed
# to perform different stages of rendering, with the application indicating which
# objects should be rendered but the actual rendering process happening after a
# sorting step.
class Renderer:
def __init__(self):
super().__init__()
self._render_passes = SortedListWithKey(key = lambda k: k.getPriority())
## Signal the beginning of the rendering process.
#
# This should set up any required state before any actual rendering happens.
def beginRendering(self):
raise NotImplementedError()
## Queue a node to be rendered.
#
# \param node The node to queue for rendering.
# \param kwargs Keyword arguments.
# Most of these are passed to the RenderBatch constructor directly. See RenderBatch for all available options.
# In addition, the parameter "shader" is available, which determines the shader to render with. When not specified,
# it defaults to a simple vertex color shader.
def queueNode(self, node: "SceneNode", **kwargs):
raise NotImplementedError()
## Render everything that was set up to be rendered.
def render(self):
raise NotImplementedError()
## Finish rendering, finalize and clear state.
def endRendering(self):
raise NotImplementedError()
## Add a render pass that should be rendered.
#
# \param render_pass The render pass to add.
def addRenderPass(self, render_pass: "RenderPass"):
self._render_passes.add(render_pass)
## Remove a render pass from the list of render passes to render.
#
# \param render_pass The render pass to remove.
def removeRenderPass(self, render_pass: "RenderPass"):
if render_pass in self._render_passes:
self._render_passes.remove(render_pass)
## Get a render pass by name.
#
# \param name The name of the render pass to get.
#
# \return The named render pass or None if not found.
def getRenderPass(self, name: str) -> Optional["RenderPass"]:
for render_pass in self._render_passes:
if render_pass.getName() == name:
return render_pass
return None
## Get the list of all render passes that should be rendered.
def getRenderPasses(self):
return self._render_passes
|