XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
Legacy_RenderSystem.class.php
1<?php
4 * @package LegacyRender
5 * @version 2.5.0
6 * @author Nobuhiro YASUTOMI, PHP8
7 * @author Nuno Luciano v.XCL23
8 * @author Kazuhisa Minato aka minahito v 1.4 2008/08/26 15:58:41
9 */
10
11if (!defined('XOOPS_ROOT_PATH')) {
12 exit();
13}
14
15require_once XOOPS_ROOT_PATH.'/modules/legacyRender/kernel/Legacy_RenderTarget.class.php';
16require_once XOOPS_ROOT_PATH . '/class/template.php';
17
22define('LEGACY_RENDERSYSTEM_BANNERSETUP_BEFORE', false);
23
29class Legacy_XoopsTpl extends XoopsTpl
30{
36 public $_mContextReserve = ['xoops_pagetitle' => 'legacy_pagetitle'];
37//public $_mContextReserve = [];
38
39 public function __construct()
40 {
41 //$this->_mContextReserve = ['xoops_pagetitle' => 'legacy_pagetitle'];
42 parent::__construct();
43 }
44
45 public function assign($tpl_var, $value = null)
46 {
47 if (is_array($tpl_var)) {
48 $root =& XCube_Root::getSingleton();
49 $context = $root->mContext;
50 $reserve = $this->_mContextReserve;
51 foreach ($tpl_var as $key => $val) {
52 if ('' !== $key) {
53 if (isset($reserve[$key])) {
54 $context->setAttribute($reserve[$key], htmlspecialchars_decode($val));
55 }
56 $this->_tpl_vars[$key] = $val;
57 }
58 }
59 } else {
60 if ($tpl_var) {
61 if (isset($this->_mContextReserve[$tpl_var])) {
62 $root =& XCube_Root::getSingleton();
63 $root->mContext->setAttribute($this->_mContextReserve[$tpl_var], htmlspecialchars_decode($value));
64 }
65 $this->_tpl_vars[$tpl_var] = $value;
66 }
67 }
68 }
69
70 public function assign_by_ref($tpl_var, &$value)
71 {
72 if ('' !== $tpl_var) {
73 if (isset($this->_mContextReserve[$tpl_var])) {
74 $root =& XCube_Root::getSingleton();
75 $root->mContext->setAttribute($this->_mContextReserve[$tpl_var], htmlspecialchars_decode($value));
76 }
77 $this->_tpl_vars[$tpl_var] =& $value;
78 }
79 }
80
81 public function &get_template_vars($name = null)
82 {
83 $root =& XCube_Root::getSingleton();
84 if (!isset($name)) {
85 foreach ($this->_mContextReserve as $t_key => $t_value) {
86 if (isset($this->_mContextReserve[$t_value])) {
87 $this->_tpl_vars[$t_key] = htmlspecialchars($root->mContext->getAttribute($this->_mContextReserve[$t_value]), ENT_QUOTES);
88 }
89 }
90 $value =& parent::get_template_vars($name);
91 } elseif (isset($this->_mContextReserve[$name])) {
92 $value = htmlspecialchars($root->mContext->getAttribute($this->_mContextReserve[$name]), ENT_QUOTES);
93 } else {
94 $value =& parent::get_template_vars($name);
95 }
96 return $value;
97 }
98}
99// @TODO test version 2.5.0
100require_once XOOPS_ROOT_PATH . '/core/XCube_Theme.class.php';
108{
109 public $mXoopsTpl;
110
115
120
121 public $_mContentsData = null;
122
126 public $mSetupXoopsTpl = null;
127
131 public $_mIsActiveBanner = false;
132
133 public $mBeginRender = null;
134
135 /* public function Legacy_RenderSystem()
136 {
137 $this->__construct();
138 }*/
139
140 public function __construct()
141 {
142 parent::__construct();
143
144 $this->mSetupXoopsTpl =new XCube_Delegate();
145 $this->mSetupXoopsTpl->register('Legacy_RenderSystem.SetupXoopsTpl');
146
147 $this->mBeginRender =new XCube_Delegate();
148 $this->mBeginRender->register('Legacy_RenderSystem.BeginRender');
149 }
150
151 public function prepare(&$controller)
152 {
153 parent::prepare($controller);
154
155 $root =& $this->mController->mRoot;
156 $context =& $root->getContext();
157 $textFilter =& $root->getTextFilter();
158
159 // Legacy default setup XoopsTpl
160 if (isset($GLOBALS['xoopsTpl'])) {
161 $this->mXoopsTpl =& $GLOBALS['xoopsTpl'];
162 } else {
163 $this->mXoopsTpl =new Legacy_XoopsTpl();
164 }
165 $mTpl =& $this->mXoopsTpl;
166 $mTpl->register_function('legacy_notifications_select', 'LegacyRender_smartyfunction_notifications_select');
167 $this->mSetupXoopsTpl->call(new XCube_Ref($mTpl));
168
169 // Legacy compatibility
170 $GLOBALS['xoopsTpl'] =& $mTpl;
171
172 $mTpl->xoops_setCaching(0);
173
174 // If debugger request debugging, send debug mode signal by any methods.
175 if ($controller->mDebugger && $controller->mDebugger->isDebugRenderSystem()) {
176 $mTpl->xoops_setDebugging(true);
177 }
178
179 if (isset($GLOBALS['xoopsUserIsAdmin'])) {
180 $isadmin['xoops_isadmin']=$GLOBALS['xoopsUserIsAdmin'];
181 }
182 $mTpl->assign(
183 [
184 'xoops_requesturi' => htmlspecialchars($GLOBALS['xoopsRequestUri'], ENT_QUOTES), //@todo ?????????????
185 //@todo set JavaScript/Weird, but need extra <script> tags for Xoops Legacy 2.x themes
186 // XCL 2.3.x moved to /common/js/x-utils.js
187 // 'xoops_js' => '</script><script type="text/javascript" src="'.XOOPS_URL.'/include/xoops.js"></script><script type="text/javascript">'
188 'xoops_js' => '</script><script type="text/javascript" src="'.XOOPS_URL.'/common/js/x-utils.js"></script><script type="text/javascript">',
189 // XCL 2.3.x
190 'xutils_js' => '</script><script type="text/javascript" src="'.XOOPS_URL.'/common/js/x-utils.js"></script><script type="text/javascript">'
191 ]
192 );
193
194 if (($xoopsRedirect = xoops_getrequest('xoops_redirect')) && '/' === $xoopsRedirect[0]) {
195 $mTpl->assign('xoops_redirect', htmlspecialchars($xoopsRedirect, ENT_QUOTES));
196 }
197
198 $mTpl->assign('xoops_sitename', $textFilter->toShow($context->getAttribute('legacy_sitename')));
199 $mTpl->assign('xoops_pagetitle', $textFilter->toShow($context->getAttribute('legacy_pagetitle')));
200 $mTpl->assign('xoops_slogan', $textFilter->toShow($context->getAttribute('legacy_slogan')));
201
202 // --------------------------------------
203 // Module - Banner
204 // --------------------------------------
205 $moduleHandler = xoops_gethandler('module');
206 $legacyRender =& $moduleHandler->getByDirname('legacyRender');
207
208 if (is_object($legacyRender)) {
209 $configHandler = xoops_gethandler('config');
210 $configs =& $configHandler->getConfigsByCat(0, $legacyRender->get('mid'));
211
212 //
213 // If this site has banner set.
214 // TODO this process depends on XOOPS 2.x Legacy.
215 //
216 $this->_mIsActiveBanner = $configs['banners'];
217 if (LEGACY_RENDERSYSTEM_BANNERSETUP_BEFORE == true) {
218 if (1 == $configs['banners']) {
219 $mTpl->assign('xoops_banner', xoops_getbanner());
220 $mTpl->assign('banner', xoops_getbanner()); // XCL 2.3.x
221 } else {
222 $mTpl->assign('xoops_banner', '&nbsp;');
223 $mTpl->assign('banner', '&nbsp;'); // XCL 2.3.x
224 }
225 }
226 } else {
227 $mTpl->assign('xoops_banner', '&nbsp;');
228 $mTpl->assign('banner', '&nbsp;'); // XCL 2.3.x
229 }
230
231 // --------------------------------------
232 // Add User
233 // --------------------------------------
234 $arr = null;
235 if (is_object($context->mXoopsUser)) {
236 $arr = [
237 'xoops_isuser' => true,
238 'xoops_userid' => $context->mXoopsUser->getVar('uid', 'n'),
239 'xoops_uname' => $context->mXoopsUser->getVar('uname')
240 ];
241 } else {
242 $arr = [
243 'xoops_isuser' => false
244 ];
245 }
246
247 $mTpl->assign($arr);
248 }
249
250 public function setAttribute($key, $value)
251 {
252 $this->mRenderTarget->setAttribute($key, $value);
253 }
254
255 public function getAttribute($key)
256 {
257 $this->mRenderTarget->getAttribute($key);
258 }
259
264 public function _commonPrepareRender()
265 {
266 $root =& $this->mController->mRoot;
267 $context =& $root->getContext();
268 $textFilter =& $root->getTextFilter();
269 // @gigamaster get theme name
270 $themeName = $context->getThemeName();
271 $vars = [
272 'xoops_theme' =>$themeName,
273 'xoops_imageurl' =>XOOPS_THEME_URL . "/{$themeName}/",
274 'xoops_themecss' =>xoops_getcss($themeName),
275 'xoops_sitename' =>$textFilter->toShow($context->getAttribute('legacy_sitename')),
276 'xoops_pagetitle' =>$textFilter->toShow($context->getAttribute('legacy_pagetitle')),
277 'xoops_slogan' =>$textFilter->toShow($context->getAttribute('legacy_slogan')),
278 'xoops_dirname' => ''
279 ];
280
281 //
282 // Assign module information.
283 //
284 if (null !== $context->mModule) { // The process of module
285 $xoopsModule =& $context->mXoopsModule;
286 $vars['xoops_modulename'] = $xoopsModule->getVar('name');
287 $vars['xoops_dirname'] = $xoopsModule->getVar('dirname');
288 $vars['dirname'] = $xoopsModule->getVar('dirname');
289 }
290
291 if (isset($GLOBALS['xoopsUserIsAdmin'])) {
292 $vars['xoops_isadmin']=$GLOBALS['xoopsUserIsAdmin'];
293 }
294 $this->mXoopsTpl->assign($vars);
295 }
296
297 public function renderBlock(&$target)
298 {
299 $this->_commonPrepareRender();
300
301 //
302 // Temporary
303 //
304 $mTpl = $this->mXoopsTpl;
305 $mTpl->xoops_setCaching(0);
306
307 $vars = $target->getAttributes();
308 $mTpl->assign($vars);
309
310 $this->mBeginRender->call(new XCube_Ref($mTpl));
311 $result=&$mTpl->fetchBlock($target->getTemplateName(), $target->getAttribute('bid'));
312 $target->setResult($result);
313
314 //
315 // Reset
316 //
317 $mTpl->clear_assign(array_keys($vars));
318 }
319
320 public function _render(&$target)
321 {
322 foreach ($target->getAttributes() as $key=>$value) {
323 $this->mXoopsTpl->assign($key, $value);
324 }
325
326 $this->mBeginRender->call(new XCube_Ref($this->mXoopsTpl), $target->getAttribute('legacy_buffertype'));
327 $result=$this->mXoopsTpl->fetch('db:'.$target->getTemplateName());
328 $target->setResult($result);
329
330 foreach ($target->getAttributes() as $key => $value) {
331 $this->mXoopsTpl->clear_assign($key);
332 }
333 }
334
335 public function render(&$target)
336 {
337 //
338 // The following lines are temporary until we will finish changing the style!
339 //
340 switch ($target->getAttribute('legacy_buffertype')) {
341 case XCUBE_RENDER_TARGET_TYPE_BLOCK:
342 $this->renderBlock($target);
343 break;
344
345 case XCUBE_RENDER_TARGET_TYPE_MAIN:
346 $this->renderMain($target);
347 break;
348
349 case XCUBE_RENDER_TARGET_TYPE_THEME:
350 $this->renderTheme($target);
351 break;
352
353 case XCUBE_RENDER_TARGET_TYPE_BUFFER:
354 default:
355 break;
356 }
357 }
358
359 public function renderMain(&$target)
360 {
361 $GLOBLAS = [];
362 $xoopsCachedTemplateId = null;
363 $this->_commonPrepareRender();
364
365 $cachedTemplateId = $GLOBLAS['xoopsCachedTemplateId'] ?? null;
366
367 foreach ($target->getAttributes() as $key=>$value) {
368 $this->mXoopsTpl->assign($key, $value);
369 }
370
371 if ($target->getTemplateName()) {
372 if (null !== $cachedTemplateId) {
373 $contents=$this->mXoopsTpl->fetch('db:'.$target->getTemplateName(), $xoopsCachedTemplateId);
374 } else {
375 $contents=$this->mXoopsTpl->fetch('db:'.$target->getTemplateName());
376 }
377 } else if (null !== $cachedTemplateId) {
378 $this->mXoopsTpl->assign('dummy_content', $target->getAttribute('stdout_buffer'));
379 $contents=$this->mXoopsTpl->fetch($GLOBALS['xoopsCachedTemplate'], $xoopsCachedTemplateId);
380 } else {
381 $contents=$target->getAttribute('stdout_buffer');
382 }
383
384 $target->setResult($contents);
385 }
386
387 public function renderTheme(&$target)
388 {
389 $this->_commonPrepareRender();
390
391 // jQuery Ready functions
392 $mRoot = $this->mController->mRoot;
393 $mContext = $mRoot->mContext;
394 XCube_DelegateUtils::call('Site.JQuery.AddFunction', new XCube_Ref($mContext->mAttributes['headerScript']));
395 $headerScript = $mContext->getAttribute('headerScript');
396 $mTpl = $this->mXoopsTpl;
397 $moduleHeader = $mTpl->get_template_vars('xoops_module_header');
398 $moduleHeader = $headerScript->createLibraryTag() . $moduleHeader . $headerScript->createOnloadFunctionTag();
399
400 //
401 // Assign from attributes of the render-target.
402 //
403 $vars = $target->getAttributes();
404 $vars['xoops_module_header'] = $moduleHeader;
405 $vars['module_header'] = $moduleHeader; // xcl 2.3.x
406
407 // gigamaster assign Render configs logotype, favicon
408 // in /class/template.php for X3 D3 compatibility
409 $moduleHandler = xoops_gethandler('module');
410 $legacyRender =& $moduleHandler->getByDirname('legacyRender');
411 $configHandler = xoops_gethandler('config');
412 $configs =& $configHandler->getConfigsByCat(0, $legacyRender->get('mid'));
413
414 $textFilter =& $mRoot->getTextFilter();
415 $headerScript = $mContext->getAttribute('headerScript');
416 $vars['xoops_meta_keywords'] = $textFilter->toShow($headerScript->getMeta('keywords') ?: $configs['meta_keywords']);
417 $vars['xoops_meta_description'] = $textFilter->toShow($headerScript->getMeta('description') ?: $configs['meta_description']);
418 $vars['xoops_meta_robots'] = $textFilter->toShow($headerScript->getMeta('robots') ?: $configs['meta_robots']);
419 $vars['xoops_meta_rating'] = $textFilter->toShow($headerScript->getMeta('rating') ?: $configs['meta_rating']);
420 $vars['xoops_meta_author'] = $textFilter->toShow($headerScript->getMeta('author') ?: $configs['meta_author']);
421 $vars['xoops_meta_copyright'] = $textFilter->toShow($headerScript->getMeta('copyright') ?: $configs['meta_copyright']);
422 // Extra Meta Webmaster Tools
423 $vars['xoops_meta_bing'] = $textFilter->toShow($headerScript->getMeta('msvalidate.01') ?: $configs['meta_bing']);
424 $vars['xoops_meta_google'] = $textFilter->toShow($headerScript->getMeta('google-site-verification') ?: $configs['meta_google']);
425 $vars['xoops_meta_yandex'] = $textFilter->toShow($headerScript->getMeta('yandex-verification') ?: $configs['meta_yandex']);
426 // Extra Meta App ID
427 $vars['xoops_meta_fb_app'] = $textFilter->toShow($headerScript->getMeta('fb:app_id') ?: $configs['meta_fb_app']);
428 $vars['xoops_meta_twitter_site'] = $textFilter->toShow($headerScript->getMeta('twitter:site') ?: $configs['meta_twitter_site']);
429 // custom
430 $vars['logotype'] = $configs['logotype'];
431 $vars['favicon'] = $configs['favicon'];
432 // footer may be raw HTML text.
433 $vars['xoops_footer'] = $configs['footer'];
434
435
436 //
437 // Banner Management Settings
438 // TODO this process depends on XOOPS2 Legacy.
439 //
440 if (LEGACY_RENDERSYSTEM_BANNERSETUP_BEFORE == false) {
441 $vars['xoops_banner'] = (1 == $this->_mIsActiveBanner)?xoops_getbanner():'&nbsp;';
442 $vars['banner'] = (1 == $this->_mIsActiveBanner)?xoops_getbanner():'&nbsp;'; // XCL 2.3.x
443 }
444
445 $mTpl->assign($vars);
446
447 //
448 // [TODO]
449 // We must implement with a render-target.
450 //
451 // $this->_processLegacyTemplate();
452
453 // assign
455 $assignNameMap = [
456 XOOPS_SIDEBLOCK_LEFT=> ['showflag' =>'xoops_showlblock', 'block' =>'xoops_lblocks'],
457 XOOPS_CENTERBLOCK_LEFT=> ['showflag' =>'xoops_showcblock', 'block' =>'xoops_clblocks'],
458 XOOPS_CENTERBLOCK_RIGHT=> ['showflag' =>'xoops_showcblock', 'block' =>'xoops_crblocks'],
459 XOOPS_CENTERBLOCK_CENTER=> ['showflag' =>'xoops_showcblock', 'block' =>'xoops_ccblocks'],
460 XOOPS_SIDEBLOCK_RIGHT=> ['showflag' =>'xoops_showrblock', 'block' =>'xoops_rblocks']
461 ];
462
463 foreach ($assignNameMap as $key=>$val) {
464 $mTpl->assign($val['showflag'], $this->_getBlockShowFlag($val['showflag']));
465 if (isset($mContext->mAttributes['legacy_BlockContents'][$key])) {
466 foreach ($mContext->mAttributes['legacy_BlockContents'][$key] as $result) {
467 $mTpl->append($val['block'], $result);
468 }
469 }
470 }
471
472 $this->mBeginRender->call(new XCube_Ref($mTpl));
473
474 //
475 // Render result, and set it to the RenderBuffer of the $target.
476 //
477 $result=null;
478 if ($target->getAttribute('isFileTheme')) {
479 $result=$mTpl->fetch($target->getTemplateName().'/theme.html');
480 } else {
481 $result=$mTpl->fetch('db:'.$target->getTemplateName());
482 }
483
484 $result .= $mTpl->fetchDebugConsole();
485
486 $target->setResult($result);
487 }
488
493 public function _getBlockShowFlag($area)
494 {
495 switch ($area) {
496 case 'xoops_showrblock' :
497 if (isset($GLOBALS['show_rblock']) && empty($GLOBALS['show_rblock'])) {
498 return 0;
499 }
500 return (!empty($this->mController->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][XOOPS_SIDEBLOCK_RIGHT])) ? 1 : 0;
501 break;
502 case 'xoops_showlblock' :
503 if (isset($GLOBALS['show_lblock']) && empty($GLOBALS['show_lblock'])) {
504 return 0;
505 }
506 return (!empty($this->mController->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][XOOPS_SIDEBLOCK_LEFT])) ? 1 : 0;
507 break;
508 case 'xoops_showcblock' :
509 if (isset($GLOBALS['show_cblock']) && empty($GLOBALS['show_cblock'])) {
510 return 0;
511 }
512 return (!empty($this->mController->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][XOOPS_CENTERBLOCK_LEFT])||
513 !empty($this->mController->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][XOOPS_CENTERBLOCK_RIGHT])||
514 !empty($this->mController->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][XOOPS_CENTERBLOCK_CENTER])) ? 1 : 0;
515 break;
516 default :
517 return 0;
518 }
519 }
520
521 //
522 // TODO : These deprecated functions should not be here !
523 //
524
528 public function sendHeader()
529 {
530 header('Content-Type:text/html; charset='._CHARSET);
531 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
532 header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
533 header('Cache-Control: no-store, no-cache, must-revalidate');
534 header('Cache-Control: post-check=0, pre-check=0', false);
535 header('Pragma: no-cache');
536 }
537
542 public function showXoopsHeader($closeHead=true)
543 {
544 global $xoopsConfig;
546//if (1 == $xoopsConfig['gzip_compression']) {
547 if (1 === $xoopsConfig['gzip_compression']) {
548 ob_start('ob_gzhandler');
549 } else {
550 ob_start();
551 }
552
553 $this->sendHeader();
554 $this->_renderHeader($closeHead);
555 }
556
557 // TODO never output directly
558
563 public function _renderHeader($closehead=true)
564 {
565 global $xoopsConfig, $xoopsTheme, $xoopsConfigMetaFooter;
566
567 echo '<!DOCTYPE html>';
568
569 echo '<html lang="<{$xoops_langcode}>">
570 <head>
571 <meta http-equiv="content-type" content="text/html; charset='._CHARSET.'">
572 <meta http-equiv="content-language" content="'._LANGCODE.'">
573 <meta name="robots" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_robots']).'">
574 <meta name="keywords" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_keywords']).'">
575 <meta name="description" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_desc']).'">
576 <meta name="rating" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_rating']).'">
577 <meta name="author" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_author']).'">
578 <meta name="copyright" content="'.htmlspecialchars($xoopsConfigMetaFooter['meta_copyright']).'">
579 <meta name="generator" content="XOOPSCube">
580 <title>'.htmlspecialchars($xoopsConfig['sitename']).'</title>
581 <script type="text/javascript" src="'.XOOPS_URL.'/common/js/x-utils.js"></script>
582 ';
583 $themecss = getcss($xoopsConfig['theme_set']);
584 echo '<link rel="stylesheet" type="text/css" media="all" href="'.XOOPS_URL.'/theme/xcl_default/style.css">';
585 if ($themecss) {
586 echo '<link rel="stylesheet" type="text/css" media="all" href="'.$themecss.'">';
587 }
588 if ($closehead) {
589 echo '</head><body>';
590 }
591 }
592
596 public function _renderFooter()
597 {
598 echo '</body></html>';
599 ob_end_flush();
600 }
601
605 public function showXoopsFooter()
606 {
607 $this->_renderFooter();
608 }
609
610 public function &createRenderTarget($type = LEGACY_RENDER_TARGET_TYPE_MAIN, $option = null)
611 {
612 $renderTarget = null;
613 switch ($type) {
614 case XCUBE_RENDER_TARGET_TYPE_MAIN:
615 $renderTarget =new Legacy_RenderTargetMain();
616 break;
617
618 case LEGACY_RENDER_TARGET_TYPE_BLOCK:
619 $renderTarget =new XCube_RenderTarget();
620 $renderTarget->setAttribute('legacy_buffertype', LEGACY_RENDER_TARGET_TYPE_BLOCK);
621 break;
622
623 default:
624 $renderTarget =new XCube_RenderTarget();
625 break;
626 }
627
628 return $renderTarget;
629 }
630
636 public function &getThemeRenderTarget($isDialog)
637 {
638 $screenTarget = $isDialog ? new Legacy_DialogRenderTarget() : new Legacy_ThemeRenderTarget();
639 return $screenTarget;
640 }
641}
642
649function LegacyRender_smartyfunction_notifications_select($params, &$smarty)
650{
651 $root =& XCube_Root::getSingleton();
652 $renderSystem =& $root->getRenderSystem('Legacy_RenderSystem');
653
654 $renderTarget =& $renderSystem->createRenderTarget('main');
655 $renderTarget->setTemplateName('legacy_notification_select_form.html');
656
657 XCube_DelegateUtils::call('Legacyfunction.Notifications.Select', new XCube_Ref($renderTarget));
658
659 $renderSystem->render($renderTarget);
660
661 return $renderTarget->getResult();
662}
This allows you to directly manage the theme and the main rendering target. And, this implements the ...
The sub-class for Legacy_RenderSystem.
[Final] Used for the simple mechanism for common delegation in XCube.