18 #ifndef EQFABRIC_VIEWPORT_H
19 #define EQFABRIC_VIEWPORT_H
21 #include <eq/fabric/api.h>
22 #include <eq/fabric/types.h>
23 #include <lunchbox/debug.h>
31 std::ostream& operator << ( std::ostream& os,
const Viewport& vp );
40 Viewport() : x(0.0f), y(0.0f), w(1.0f), h(1.0f) {}
43 explicit Viewport(
const float x_,
const float y_,
44 const float w_,
const float h_ )
45 : x(x_), y(y_), w(w_), h(h_) {}
49 : x( from[0] ), y( from[1] ), w( from[2] ), h( from[3] ) {}
58 LBASSERTINFO(
isValid(), *
this);
59 LBASSERTINFO( rhs.
isValid(), rhs );
71 x = ( x - rhs.
x ) / rhs.
w;
72 y = ( y - rhs.
y ) / rhs.
h;
81 return ( x==rhs.
x && y==rhs.
y && w==rhs.
w && h==rhs.
h);
90 return ( x!=rhs.
x || y!=rhs.
y || w!=rhs.
w || h!=rhs.
h);
99 {
return ( x>=0.0f && y>=0.0f && w>=0.0f && h>=0.0f ); }
106 bool hasArea()
const {
return (w>0.0f && h>0.0f); }
138 const float sEx =
static_cast< float >( x +
w );
139 const float sEy =
static_cast< float >( y +
h );
140 const float dEx =
static_cast< float >( rhs.
x + rhs.
w );
141 const float dEy =
static_cast< float >( rhs.
y + rhs.
h );
143 x = LB_MAX( x, rhs.
x );
144 y = LB_MAX( y, rhs.
y );
145 w = LB_MIN( sEx, dEx ) -
x;
146 h = LB_MIN( sEy, dEy ) -
y;
154 x = LB_MIN( x, rhs.
x );
155 y = LB_MIN( y, rhs.
y );
187 inline std::ostream& operator << ( std::ostream& os,
const Viewport& vp )
189 os <<
"[ " << vp.
x <<
" " << vp.
y <<
" " << vp.
w <<
" " << vp.
h <<
" ]";
205 #endif // EQFABRIC_VIEWPORT_H
A fractional viewport with methods for manipulation.
bool operator!=(const Viewport &rhs) const
Viewport getCoverage(const Viewport &with) const
Compute the coverage of another viewport on this viewport.
vmml::vector< 4, int > Vector4i
A four-component integer vector.
Viewport(const Vector4f &from)
Construct a fractional viewport from a Vector4f.
void intersect(const Viewport &rhs)
Create the intersection of the two viewports.
Viewport()
Construct a full fractional viewport.
void transform(const Viewport &rhs)
Transform this viewport into the rhs viewport space.
void invalidate()
Make the viewport invalid.
bool operator==(const Viewport &rhs) const
Viewport(const float x_, const float y_, const float w_, const float h_)
Construct a fractional viewport with default values.
static EQFABRIC_API const Viewport FULL
A full viewport.
EQFABRIC_API void applyView(const Viewport &segmentVP, const Viewport &viewVP, const PixelViewport &pvp, const Vector4i &overdraw)
Apply the view coverage to this viewport.
void apply(const Viewport &rhs)
Apply (accumulate) another viewport.
vmml::vector< 4, float > Vector4f
A four-component float vector.
Holds a 2D pixel viewport with methods for manipulation.
void unite(const Viewport &rhs)
Create the union of the two viewports.