Просмотр исходного кода

Viewport access for embedded player

Josh Engebretson 10 лет назад
Родитель
Сommit
30332e9e1e

+ 4 - 4
Data/AtomicPlayer/Resources/CoreData/AtomicModules/AtomicGame.js

@@ -74,9 +74,9 @@ Game.prototype.createScene2D = function() {
     var viewport = null;
     
     if (Atomic.editor) {
-        Atomic.editor.setView(scene, camera);
+        viewport = Atomic.editor.setView(scene, camera);
     } else {
-        var viewport = new Atomic.Viewport(scene, camera);
+        viewport = new Atomic.Viewport(scene, camera);
         this.renderer.setViewport(0, viewport);
     }
 
@@ -105,9 +105,9 @@ Game.prototype.createScene3D = function(filename) {
 
     var viewport = null;
     if (Atomic.editor) {
-        Atomic.editor.setView(scene, camera);
+        viewport = Atomic.editor.setView(scene, camera);
     } else {
-        var viewport = new Atomic.Viewport(scene, camera);
+        viewport = new Atomic.Viewport(scene, camera);
         this.renderer.setViewport(0, viewport);
     }
 

+ 8 - 2
Source/AtomicEditor/Source/Player/AEPlayer.cpp

@@ -36,9 +36,15 @@ static int js_atomiceditor_SetView(duk_context* ctx)
     Scene* scene = js_to_class_instance<Scene>(ctx, 0, 0);
     Camera* camera = js_to_class_instance<Camera>(ctx, 1, 0);
 
-    player->GetUIPlayer()->SetView(scene, camera);
+    UIPlayer* uiPlayer = player->GetUIPlayer();
+    Viewport* viewport = uiPlayer->SetView(scene, camera);
 
-    return 0;
+    IntVector2 size = uiPlayer->GetPlayerSize();
+    viewport->SetRect(IntRect(0, 0, size.x_, size.y_));
+
+    js_push_class_object_instance(ctx, viewport, "Viewport");
+
+    return 1;
 }
 
 

+ 7 - 3
Source/AtomicEditor/Source/Player/UIPlayer.cpp

@@ -57,9 +57,12 @@ UIPlayer::UIPlayer(Context* context):
     float aspect = float(graphics->GetHeight())/ gwidth;
     gwidth -= 150;
 
+    playerSize_.x_ = gwidth;
+    playerSize_.y_ = gwidth * aspect;
+
     LayoutParams lp;
-    lp.SetWidth(gwidth);
-    lp.SetHeight(gwidth * aspect);
+    lp.SetWidth(playerSize_.x_);
+    lp.SetHeight(playerSize_.y_);
     view3DDelegate->SetLayoutParams(lp);
 
     TBLayout* playercontainer = window_->GetWidgetByIDAndType<TBLayout>(TBIDC("playerlayout"));
@@ -74,9 +77,10 @@ UIPlayer::UIPlayer(Context* context):
     SubscribeToEvent(E_UPDATE, HANDLER(UIPlayer, HandleUpdate));
 }
 
-void UIPlayer::SetView(Scene* scene, Camera* camera)
+Viewport *UIPlayer::SetView(Scene* scene, Camera* camera)
 {
     view3D_->SetView(scene, camera);
+    return view3D_->GetViewport();
 }
 
 UIPlayer::~UIPlayer()

+ 5 - 1
Source/AtomicEditor/Source/Player/UIPlayer.h

@@ -30,16 +30,20 @@ public:
     UIPlayer(Context* context);
     virtual ~UIPlayer();
 
-    void SetView(Scene* scene, Camera* camera);
+    Viewport* SetView(Scene* scene, Camera* camera);
 
     bool OnEvent(const TBWidgetEvent &ev);
 
+    const IntVector2& GetPlayerSize() { return playerSize_; }
+
 private:
 
     void HandleUpdate(StringHash eventType, VariantMap& eventData);
     SharedPtr<View3D> view3D_;
     WeakPtr<AEPlayer> aePlayer_;
 
+
+    IntVector2 playerSize_;
 };
 
 }

+ 1 - 0
Source/AtomicEditor/Source/UI/UIView3D.cpp

@@ -70,6 +70,7 @@ void View3D::OnResize(const IntVector2 &newSize)
 
     if (width > 0 && height > 0)
     {
+        viewport_->SetRect(IntRect(0, 0, width, height));
         renderTexture_->SetSize(width, height, rttFormat_, TEXTURE_RENDERTARGET);
         depthTexture_->SetSize(width, height, Graphics::GetDepthStencilFormat(), TEXTURE_DEPTHSTENCIL);
         RenderSurface* surface = renderTexture_->GetRenderSurface();