forked from julrog/nn_vis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrenderer.py
47 lines (40 loc) · 2.22 KB
/
renderer.py
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
import abc
from typing import List, Dict, Callable
from opengl_helper.data_set import BaseRenderSet, OverflowingRenderSet, LayeredRenderSet, RenderSet
from opengl_helper.shader import RenderShader, ShaderSetting
from opengl_helper.shader_handler import RenderShaderHandler
from opengl_helper.vertex_data_handler import BaseDataHandler, OverflowingVertexDataHandler, LayeredVertexDataHandler, \
VertexDataHandler
from rendering.rendering_config import RenderingConfig
from utility.camera import Camera
class Renderer:
def __init__(self):
__metaclass__ = abc.ABCMeta
self.shaders: Dict[str, RenderShader] = dict()
self.sets: Dict[str, BaseRenderSet] = dict()
self.render_funcs: Dict[str, Callable] = dict()
self.element_count_funcs: Dict[str, Callable] = dict()
self.render_elements: int = 0
def set_shader(self, shader_settings: List[ShaderSetting]):
shader_handler: RenderShaderHandler = RenderShaderHandler()
for shader_setting in shader_settings:
self.shaders[shader_setting.id_name] = shader_handler.create(shader_setting)
def create_sets(self, data_handler: BaseDataHandler):
if isinstance(data_handler, OverflowingVertexDataHandler):
for name, shader in self.shaders.items():
self.sets[name] = OverflowingRenderSet(shader, data_handler, self.render_funcs[name],
self.element_count_funcs[name])
elif isinstance(data_handler, LayeredVertexDataHandler):
for name, shader in self.shaders.items():
self.sets[name] = LayeredRenderSet(shader, data_handler, self.render_funcs[name],
self.element_count_funcs[name])
elif isinstance(data_handler, VertexDataHandler):
for name, shader in self.shaders.items():
self.sets[name] = RenderSet(shader, data_handler, self.render_funcs[name],
self.element_count_funcs[name])
@abc.abstractmethod
def render(self, set_name: str, cam: Camera, config: RenderingConfig = None, show_class: int = 0):
return
@abc.abstractmethod
def delete(self):
return