| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include "CmViewport.h"
- #include "CmException.h"
- #include "CmRenderTarget.h"
- #include "CmMath.h"
- #include "CmRenderSystem.h"
- namespace BansheeEngine
- {
- const Color Viewport::DEFAULT_CLEAR_COLOR = Color(143.0f / 255.0f, 111.0f / 255.0f, 0);
- Viewport::Viewport()
- :mTarget(nullptr), mClearColor(DEFAULT_CLEAR_COLOR), mRequiresColorClear(true), mRequiresDepthClear(true),
- mRequiresStencilClear(false), mStencilClearValue(0), mDepthClearValue(1.0f)
- {
- updateArea();
- }
- Viewport::Viewport(const RenderTargetPtr& target, float x, float y, float width, float height)
- :mTarget(target), mNormArea(x, y, width, height), mClearColor(DEFAULT_CLEAR_COLOR), mRequiresColorClear(true),
- mRequiresDepthClear(true), mRequiresStencilClear(false), mStencilClearValue(0), mDepthClearValue(1.0f)
- {
- if(target != nullptr)
- {
- // Note: RenderTarget resize will only get triggered for RenderWindows, RenderTextures are immutable
- mTargetResizedConn = target->onResized.connect(std::bind(&Viewport::targetResized, this));
- }
- updateArea();
- }
- Viewport::~Viewport()
- {
- mTargetResizedConn.disconnect();
- }
- void Viewport::targetResized()
- {
- updateArea();
- if(!onResized.empty())
- onResized();
- }
- void Viewport::updateArea()
- {
- if(mTarget != nullptr)
- {
- float height = (float) mTarget->getHeight();
- float width = (float) mTarget->getWidth();
- mArea.x = (int) (mNormArea.x * width);
- mArea.y = (int) (mNormArea.y * height);
- mArea.width = (int) (mNormArea.width * width);
- mArea.height = (int) (mNormArea.height * height);
- }
- }
- void Viewport::setArea(float x, float y, float width, float height)
- {
- mNormArea.x = x;
- mNormArea.y = y;
- mNormArea.width = width;
- mNormArea.height = height;
- updateArea();
- }
- }
|