Equalizer  2.0.0
Parallel Rendering Framework
image.h
1 
2 /* Copyright (c) 2006-2016, Stefan Eilemann <eile@equalizergraphics.com>
3  * Daniel Nachbaur <danielnachbaur@gmail.com>
4  * Cedric Stalder <cedric.stalder@gmail.com>
5  * Enrique <egparedes@ifi.uzh.ch>
6  *
7  * This library is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Lesser General Public License version 2.1 as published
9  * by the Free Software Foundation.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20 
21 #ifndef EQ_IMAGE_H
22 #define EQ_IMAGE_H
23 
24 #include <eq/frame.h> // for Frame::Buffer enum
25 #include <eq/types.h>
26 
27 namespace eq
28 {
29 namespace detail { class Image; }
30 
36 class Image
37 {
38 public:
40  EQ_API Image();
41 
43  EQ_API virtual ~Image();
44 
58  EQ_API void setInternalFormat( const Frame::Buffer buffer,
59  const uint32_t internalFormat );
60 
62  EQ_API uint32_t getInternalFormat( const Frame::Buffer buffer )const;
63 
75  EQ_API uint32_t getExternalFormat( const Frame::Buffer buffer ) const;
76 
84  EQ_API uint32_t getPixelSize( const Frame::Buffer buffer ) const;
85 
91  EQ_API bool hasAlpha() const;
92 
104  EQ_API void setStorageType( const Frame::Type type );
105 
107  EQ_API Frame::Type getStorageType() const;
108 
120  EQ_API void setPixelViewport( const PixelViewport& pvp );
121 
123  EQ_API const PixelViewport& getPixelViewport() const;
124 
126  EQ_API void setZoom( const Zoom& zoom );
127 
129  EQ_API const Zoom& getZoom() const;
130 
132  EQ_API void setContext( const RenderContext& context );
133 
135  EQ_API const RenderContext& getContext() const;
136 
146  EQ_API void useCompressor( Frame::Buffer buffer, uint32_t name );
147 
157  EQ_API void reset();
158 
160  EQ_API void flush();
161 
168  EQ_API void deleteGLObjects( util::ObjectManager& om );
169 
176  EQ_API void resetPlugins();
178 
182  EQ_API const uint8_t* getPixelPointer( const Frame::Buffer buffer )
183  const;
184 
186  EQ_API uint8_t* getPixelPointer( const Frame::Buffer buffer );
187 
189  EQ_API uint32_t getPixelDataSize( const Frame::Buffer buffer ) const;
190 
192  EQ_API const PixelData& getPixelData( const Frame::Buffer ) const;
193 
195  EQ_API const PixelData& compressPixelData( const Frame::Buffer );
196 
201  EQ_API bool hasPixelData( const Frame::Buffer buffer ) const;
202 
207  EQ_API bool hasAsyncReadback( const Frame::Buffer buffer ) const;
208 
213  EQ_API bool hasAsyncReadback() const;
214 
225  EQ_API void clearPixelData( const Frame::Buffer buffer );
226 
228  EQ_API void validatePixelData( const Frame::Buffer buffer );
229 
241  EQ_API void setPixelData( const Frame::Buffer buffer,
242  const PixelData& data );
243 
248  EQ_API void setAlphaUsage( const bool enabled );
249 
251  EQ_API bool getAlphaUsage() const;
252 
265  EQ_API void setQuality( const Frame::Buffer buffer,
266  const float quality );
267 
269  EQ_API float getQuality( const Frame::Buffer buffer ) const;
271 
275  EQ_API const util::Texture& getTexture( const Frame::Buffer buffer )
276  const;
277 
282  EQ_API bool hasTextureData( const Frame::Buffer buffer ) const;
284 
298  EQ_API bool startReadback( const uint32_t buffers, const PixelViewport& pvp,
299  const RenderContext& context, const Zoom& zoom,
300  util::ObjectManager& glObjects );
301 
303  bool startReadback( const Frame::Buffer buffer,
304  const util::Texture* texture,
305  const GLEWContext* glewContext );
306 
313  EQ_API void finishReadback( const GLEWContext* glewContext );
314 
329  EQ_API bool upload( const Frame::Buffer buffer, util::Texture* texture,
330  const Vector2i& position,
331  util::ObjectManager& glObjects ) const;
332 
341  EQ_API bool writeImage( const std::string& filename,
342  const Frame::Buffer buffer ) const;
343 
345  EQ_API bool writeImages( const std::string& filenameTemplate ) const;
346 
348  EQ_API bool readImage( const std::string& filename,
349  const Frame::Buffer buffer );
350 
352  void setOffset( int32_t x, int32_t y );
354 
361  EQ_API std::vector< uint32_t >
362  findCompressors( const Frame::Buffer buffer ) const;
363 
368  EQ_API std::vector< uint32_t >
369  findTransferers( const Frame::Buffer buffer, const GLEWContext* gl )
370  const;
371 
373  EQ_API bool allocCompressor( const Frame::Buffer buffer,
374  const uint32_t name );
375 
377  EQ_API bool allocDownloader( const Frame::Buffer buffer,
378  const uint32_t name,
379  const GLEWContext* glewContext );
380 
382  EQ_API uint32_t getDownloaderName( const Frame::Buffer buffer ) const;
384 
385 private:
386  Image( const Image& ) = delete;
387  Image& operator=( const Image& ) = delete;
388  detail::Image* const _impl;
389 
391  const void* _getBufferKey( const Frame::Buffer buffer ) const;
392 
394  const void* _getCompressorKey( const Frame::Buffer buffer ) const;
395 
406  void _setExternalFormat( const Frame::Buffer buffer,
407  const uint32_t externalFormat,
408  const uint32_t pixelSize,
409  const bool hasAlpha );
410 
411  bool _readback( const Frame::Buffer buffer, const Zoom& zoom,
412  util::ObjectManager& glObjects );
413 
414  bool _startReadback( const Frame::Buffer buffer, const Zoom& zoom,
415  util::ObjectManager& glObjects );
416 
417  void _finishReadback( const Frame::Buffer buffer, const GLEWContext* );
418  bool _readbackZoom( const Frame::Buffer buffer, util::ObjectManager& om );
419  bool _writeImage( const std::string& filename, const Frame::Buffer buffer,
420  const unsigned char* data ) const;
421 };
422 };
423 #endif // EQ_IMAGE_H
The pixel data structure manages the pixel information for images.
Definition: pixelData.h:33
Buffer
Components of the frame are to be used during readback and assembly.
Definition: fabric/frame.h:39
A wrapper around OpenGL textures.
Definition: texture.h:38
Type
The storage type for pixel data.
Definition: fabric/frame.h:49
A holder for pixel data.
Definition: image.h:36
The Equalizer client library.
Definition: eq/agl/types.h:23
A facility class to manage OpenGL objects across shared contexts.
Definition: objectManager.h:53