Jelajahi Sumber

GUIRenderTexture updated so it handles OpenGL texture flipping properly

Marko Pintera 12 tahun lalu
induk
melakukan
eaad612713

+ 6 - 1
BansheeEngine/Include/BsGUIRenderTexture.h

@@ -20,9 +20,14 @@ namespace BansheeEngine
 		static GUIRenderTexture* create(GUIWidget& parent, const CM::RenderTexturePtr& texture, const GUIOptions& layoutOptions, const GUIElementStyle* style = nullptr);
 
 	protected:
+		const CM::RenderTexture* mSourceTexture;
+
 		GUIRenderTexture(GUIWidget& parent, const GUIElementStyle* style, const CM::RenderTexturePtr& texture, const GUILayoutOptions& layoutOptions);
 		virtual ~GUIRenderTexture();
 
-		const CM::RenderTexture* mSourceTexture;
+		/**
+		 * @copydoc GUIElement::updateRenderElementsInternal()
+		 */
+		virtual void updateRenderElementsInternal();
 	};
 }

+ 16 - 0
BansheeEngine/Source/BsGUIRenderTexture.cpp

@@ -18,6 +18,12 @@ namespace BansheeEngine
 	GUIRenderTexture::GUIRenderTexture(GUIWidget& parent, const GUIElementStyle* style, const RenderTexturePtr& texture, const GUILayoutOptions& layoutOptions)
 		:GUITexture(parent, style, nullptr, GUIImageScaleMode::StretchToFit, layoutOptions), mSourceTexture(texture.get())
 	{
+		if(mSourceTexture->requiresTextureFlipping())
+		{
+			mDesc.uvOffset = Vector2(0.0f, 1.0f);
+			mDesc.uvScale = Vector2(1.0f, -1.0f);
+		}
+
 		setTexture(std::make_shared<SpriteTexture>(texture->getBindableColorTexture()));
 		GUIManager::instance().setInputBridge(mSourceTexture, this);
 	}
@@ -48,4 +54,14 @@ namespace BansheeEngine
 
 		return new (cm_alloc<GUIRenderTexture, PoolAlloc>()) GUIRenderTexture(parent, style, texture, GUILayoutOptions::create(layoutOptions, style));
 	}
+
+	void GUIRenderTexture::updateRenderElementsInternal()
+	{		
+		mDesc.width = mWidth;
+		mDesc.height = mHeight;
+
+		mImageSprite->update(mDesc);
+
+		GUIElement::updateRenderElementsInternal();
+	}
 }