Line data Source code
1 :
2 : /* Copyright (c) 2006-2012, Stefan Eilemann <eile@equalizergraphics.com>
3 : *
4 : * This library is free software; you can redistribute it and/or modify it under
5 : * the terms of the GNU Lesser General Public License version 2.1 as published
6 : * by the Free Software Foundation.
7 : *
8 : * This library is distributed in the hope that it will be useful, but WITHOUT
9 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11 : * details.
12 : *
13 : * You should have received a copy of the GNU Lesser General Public License
14 : * along with this library; if not, write to the Free Software Foundation, Inc.,
15 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16 : */
17 :
18 : #ifndef EQFABRIC_RENDERCONTEXT_H
19 : #define EQFABRIC_RENDERCONTEXT_H
20 :
21 : #include <eq/fabric/colorMask.h> // member
22 : #include <eq/fabric/eye.h> // member
23 : #include <eq/fabric/pixel.h> // member
24 : #include <eq/fabric/pixelViewport.h> // member
25 : #include <eq/fabric/range.h> // member
26 : #include <eq/fabric/subPixel.h> // member
27 : #include <eq/fabric/types.h>
28 : #include <eq/fabric/zoom.h> // member
29 :
30 : #include <co/objectVersion.h>
31 : #include <eq/fabric/api.h>
32 :
33 : namespace eq
34 : {
35 : namespace fabric
36 : {
37 : /** The context applied to a channel during rendering operations. */
38 3411 : class RenderContext
39 : {
40 : public:
41 : EQFABRIC_API RenderContext();
42 : EQFABRIC_API void apply( const Tile& tile ); //!< @internal
43 :
44 : Frustumf frustum; //!< frustum for projection matrix
45 : Frustumf ortho; //!< ortho frustum for projection matrix
46 :
47 : Matrix4f headTransform; //!< frustum transform for modelview
48 : Matrix4f orthoTransform; //!< orthographic frustum transform
49 :
50 : co::ObjectVersion view; //!< destination view id and version
51 : uint128_t frameID; //!< identifier from Config::beginFrame
52 : PixelViewport pvp; //!< pixel viewport of channel wrt window
53 : Pixel pixel; //!< pixel decomposition wrt to dest
54 : Vector4i overdraw; //!< @internal for pw pp filters
55 : Viewport vp; //!< fractional viewport wrt dest view
56 :
57 : Vector2i offset; //!< absolute position wrt dest channel
58 : Range range; //!< database-range wrt to dest channel
59 : SubPixel subpixel; //!< subpixel decomposition wrt to dest
60 : Zoom zoom; //!< up/downsampling wrt to dest
61 :
62 : uint32_t buffer; //!< buffer as passed to glDrawBuffer()
63 : uint32_t taskID; //!< @internal per-channel task counter
64 : uint32_t period; //!< DPlex period
65 : uint32_t phase; //!< DPlex phase
66 : Eye eye; //!< current eye pass
67 : uint32_t alignToEight; //!< @internal padding
68 :
69 : ColorMask bufferMask; //!< color mask for anaglyph stereo
70 : bool alignDummy[28]; //!< @internal padding
71 : };
72 :
73 : EQFABRIC_API std::ostream& operator << ( std::ostream& os,
74 : const RenderContext& ctx );
75 : }
76 : }
77 :
78 : namespace lunchbox
79 : {
80 0 : template<> inline void byteswap( eq::fabric::RenderContext& value )
81 : {
82 0 : byteswap( value.frustum );
83 0 : byteswap( value.ortho );
84 :
85 0 : byteswap( value.headTransform );
86 0 : byteswap( value.orthoTransform );
87 :
88 0 : byteswap( value.view );
89 0 : byteswap( value.frameID );
90 0 : byteswap( value.pvp );
91 0 : byteswap( value.pixel );
92 0 : byteswap( value.overdraw );
93 0 : byteswap( value.vp );
94 :
95 0 : byteswap( value.offset );
96 0 : byteswap( value.range );
97 0 : byteswap( value.subpixel );
98 0 : byteswap( value.zoom );
99 :
100 0 : byteswap( value.buffer );
101 0 : byteswap( value.taskID );
102 0 : byteswap( value.period );
103 0 : byteswap( value.phase );
104 0 : byteswap( value.eye );
105 :
106 0 : byteswap( value.bufferMask );
107 0 : }
108 : }
109 :
110 : #endif // EQFABRIC_RENDERCONTEXT_H
|