EG/ssbo_component/demo_component.py
2026-02-25 11:49:31 +08:00

78 lines
2.3 KiB
Python

"""
SSBO Editor Component Demo
==========================
Demonstrates how to usage the SSBOEditor component in a new project.
"""
import sys
import os
# ============================================================
# [CRITICAL] RenderPipeline Python Compatibility Fix
# ============================================================
if "d:/panda3d/RenderPipeline" not in sys.path:
sys.path.insert(0, "d:/panda3d/RenderPipeline")
try:
import rplibs.six
import six
if not hasattr(rplibs.six, 'moves'):
rplibs.six.moves = six.moves
sys.modules['rplibs.six.moves'] = six.moves
except ImportError:
import six
import types
if "rplibs" not in sys.modules:
rplibs = types.ModuleType("rplibs")
sys.modules["rplibs"] = rplibs
if "rplibs.six" not in sys.modules:
rplibs.six = six
sys.modules["rplibs.six"] = six
sys.modules["rplibs.six.moves"] = six.moves
# ============================================================
# Main Application
# ============================================================
from direct.showbase.ShowBase import ShowBase
from panda3d.core import loadPrcFileData, Filename
from rpcore import RenderPipeline
# Import our new component
# Assuming d:/panda3d is in python path, or running from d:/panda3d
from ssbo_component.ssbo_editor import SSBOEditor
loadPrcFileData("", "show-frame-rate-meter true")
loadPrcFileData("", "sync-video false")
class MyGame(ShowBase):
def __init__(self):
# 1. RP Init
self.rp = RenderPipeline()
self.rp.pre_showbase_init()
super().__init__()
# Position camera before RP create to avoid huge motion blur jump
self.cam.setPos(0, -500, 200)
self.cam.lookAt(0, 0, 0)
self.rp.create(self)
self.rp.daytime_mgr.time = 0.415
# 2. Use the Component
# Point to your model
model_path = "d:/panda3d/panda3d/jyc.glb"
font_path = "d:/panda3d/font/msyh.ttc"
print("Initializing SSBO Editor Component...")
self.editor = SSBOEditor(
base_app=self,
render_pipeline=self.rp,
model_path=model_path,
font_path=font_path
)
print("Demo ready.")
if __name__ == "__main__":
app = MyGame()
app.run()