forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Callable, Dict, Optional
 | 
						|
 | 
						|
import bpy
 | 
						|
from bpy.types import Material, UILayout
 | 
						|
 | 
						|
import lnx
 | 
						|
from lnx.material.shader import ShaderContext
 | 
						|
 | 
						|
if lnx.is_reload(__name__):
 | 
						|
    lnx.material.shader = lnx.reload_module(lnx.material.shader)
 | 
						|
    from lnx.material.shader import ShaderContext
 | 
						|
else:
 | 
						|
    drivers: Dict[str, Dict] = {} #dict()
 | 
						|
 | 
						|
    lnx.enable_reload(__name__)
 | 
						|
 | 
						|
 | 
						|
def add_driver(driver_name: str,
 | 
						|
               make_rpass: Callable[[str], Optional[ShaderContext]],
 | 
						|
               make_rpath: Callable[[], None],
 | 
						|
               draw_props: Optional[Callable[[UILayout], None]],
 | 
						|
               draw_mat_props: Optional[Callable[[UILayout, Material], None]]) -> None:
 | 
						|
    """Register a new driver. If there already exists a driver with the given name, nothing happens.
 | 
						|
 | 
						|
    @param driver_name Unique name for the new driver that will be displayed in the UI.
 | 
						|
    @param make_rpass Function to create render passes. Takes the rpass name as a parameter and may return `None`.
 | 
						|
    @param make_rpath Function to setup the render path.
 | 
						|
    @param draw_props Function to draw global driver properties inside the render path panel, may be `None`.
 | 
						|
    @param draw_mat_props Function to draw per-material driver properties in the material tab, may be `None`.
 | 
						|
    """
 | 
						|
    global drivers
 | 
						|
 | 
						|
    if driver_name in drivers:
 | 
						|
        return
 | 
						|
 | 
						|
    drivers[driver_name] = {
 | 
						|
        'driver_name': driver_name,
 | 
						|
        'make_rpass': make_rpass,
 | 
						|
        'make_rpath': make_rpath,
 | 
						|
        'draw_props': draw_props,
 | 
						|
        'draw_mat_props': draw_mat_props
 | 
						|
    }
 | 
						|
 | 
						|
    wrd = bpy.data.worlds['Lnx']
 | 
						|
    if len(wrd.rp_driver_list) == 0:
 | 
						|
        wrd.rp_driver_list.add().name = 'Leenkx' # Add default driver
 | 
						|
    wrd.rp_driver_list.add().name = driver_name
 | 
						|
 | 
						|
 | 
						|
def remove_drivers():
 | 
						|
    wrd = bpy.data.worlds['Lnx']
 | 
						|
    wrd.rp_driver_list.clear()
 | 
						|
    wrd.rp_driver_list.add().name = 'Leenkx'
 | 
						|
 | 
						|
    drivers.clear()
 |