|
|
@@ -18,33 +18,9 @@ namespace BansheeEngine
|
|
|
SceneEditorWidget* SceneEditorWidget::Instance = nullptr;
|
|
|
|
|
|
SceneEditorWidget::SceneEditorWidget(const ConstructPrivately& dummy, EditorWidgetContainer& parentContainer)
|
|
|
- :EditorWidget<SceneEditorWidget>(HString(L"SceneEditorWidget"), parentContainer)
|
|
|
+ :EditorWidget<SceneEditorWidget>(HString(L"SceneEditorWidget"), parentContainer), mGUIRenderTexture(nullptr)
|
|
|
{
|
|
|
- GUILayout& layout = mContent->getLayout();
|
|
|
-
|
|
|
- UINT32 width = 200; // TODO - Use proper width/height once I have texture resize working. Have some mininum limit (e.g. 4x4)
|
|
|
- UINT32 height = 200;
|
|
|
-
|
|
|
- mSceneRenderTarget = RenderTexture::create(TEX_TYPE_2D, width, height);
|
|
|
- mSceneRenderTarget->setPriority(1);
|
|
|
-
|
|
|
- HSceneObject sceneCameraSO = SceneObject::create("SceneCamera");
|
|
|
- mCamera = sceneCameraSO->addComponent<Camera>(mSceneRenderTarget, 0.0f, 0.0f, 1.0f, 1.0f);
|
|
|
-
|
|
|
- sceneCameraSO->setPosition(Vector3(0, 0, 0));
|
|
|
- sceneCameraSO->lookAt(Vector3(0, 0, -3));
|
|
|
-
|
|
|
- // DEBUG ONLY
|
|
|
- sceneCameraSO->setPosition(Vector3(-130.0f, 140.0f, 650.0f));
|
|
|
- sceneCameraSO->lookAt(Vector3(0, 0, 0));
|
|
|
-
|
|
|
- mCamera->setPriority(1);
|
|
|
- mCamera->setNearClipDistance(5);
|
|
|
- mCamera->setAspectRatio(width / (float)height);
|
|
|
-
|
|
|
- sceneCameraSO->addComponent<SceneCameraController>();
|
|
|
-
|
|
|
- layout.addElement(GUIRenderTexture::create(mSceneRenderTarget));
|
|
|
+ updateRenderTexture(getWidth(), getHeight());
|
|
|
}
|
|
|
|
|
|
SceneEditorWidget::~SceneEditorWidget()
|
|
|
@@ -61,10 +37,52 @@ namespace BansheeEngine
|
|
|
{
|
|
|
EditorWidget::doOnResized(width, height);
|
|
|
|
|
|
- // TODO - Need to resize render texture as the widget resizes
|
|
|
+ updateRenderTexture(width, height);
|
|
|
+ }
|
|
|
+
|
|
|
+ void SceneEditorWidget::updateRenderTexture(UINT32 width, UINT32 height)
|
|
|
+ {
|
|
|
+ width = std::max(20U, width);
|
|
|
+ height = std::max(20U, height);
|
|
|
+
|
|
|
+ if (mSceneRenderTarget != nullptr)
|
|
|
+ mSceneRenderTarget->destroy();
|
|
|
+
|
|
|
+ mSceneRenderTarget = RenderTexture::create(TEX_TYPE_2D, width, height);
|
|
|
+ mSceneRenderTarget->setPriority(1);
|
|
|
+
|
|
|
+ if (mCamera == nullptr)
|
|
|
+ {
|
|
|
+ HSceneObject sceneCameraSO = SceneObject::create("SceneCamera");
|
|
|
+ mCamera = sceneCameraSO->addComponent<Camera>(mSceneRenderTarget, 0.0f, 0.0f, 1.0f, 1.0f);
|
|
|
+
|
|
|
+ sceneCameraSO->setPosition(Vector3(0, 0, 0));
|
|
|
+ sceneCameraSO->lookAt(Vector3(0, 0, -3));
|
|
|
+
|
|
|
+ // DEBUG ONLY
|
|
|
+ sceneCameraSO->setPosition(Vector3(-130.0f, 140.0f, 650.0f));
|
|
|
+ sceneCameraSO->lookAt(Vector3(0, 0, 0));
|
|
|
|
|
|
- //mSceneRenderTarget->set
|
|
|
- //mCamera->setAspectRatio(getWidth() / getHeight());
|
|
|
+ mCamera->setPriority(1);
|
|
|
+ mCamera->setNearClipDistance(5);
|
|
|
+
|
|
|
+ sceneCameraSO->addComponent<SceneCameraController>();
|
|
|
+
|
|
|
+ GUILayout& layout = mContent->getLayout();
|
|
|
+
|
|
|
+ mGUIRenderTexture = GUIRenderTexture::create(mSceneRenderTarget);
|
|
|
+ layout.addElement(mGUIRenderTexture);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mCamera->getViewport()->setTarget(mSceneRenderTarget);
|
|
|
+ mGUIRenderTexture->setRenderTexture(mSceneRenderTarget);
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO - Consider only doing the resize once user stops resizing the widget in order to reduce constant
|
|
|
+ // render target destroy/create cycle for every little pixel.
|
|
|
+
|
|
|
+ mCamera->setAspectRatio(width / (float)height);
|
|
|
}
|
|
|
|
|
|
SceneEditorWidget* SceneEditorWidget::instance()
|