Equalizer
1.4.1
|
00001 00002 /* Copyright (c) 2009-2010, Cedric Stalder <cedric.stalder@gmail.com> 00003 * 2009-2012, Stefan Eilemann <eile@equalizergraphics.com> 00004 * 00005 * This library is free software; you can redistribute it and/or modify it under 00006 * the terms of the GNU Lesser General Public License version 2.1 as published 00007 * by the Free Software Foundation. 00008 * 00009 * This library is distributed in the hope that it will be useful, but WITHOUT 00010 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00011 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 00012 * details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public License 00015 * along with this library; if not, write to the Free Software Foundation, Inc., 00016 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00017 */ 00018 00167 #ifndef EQ_PLUGINS_COMPRESSOR 00168 #define EQ_PLUGINS_COMPRESSOR 00169 00171 #include <sys/types.h> 00172 struct GLEWContextStruct; 00173 struct WGLEWContextStruct; 00174 typedef struct GLEWContextStruct GLEWContext; 00175 typedef struct WGLEWContextStruct WGLEWContext; 00176 typedef unsigned long long eq_uint64_t; 00177 00178 #ifdef _MSC_VER 00179 # ifdef EQ_PLUGIN_BUILD 00180 # define EQ_PLUGIN_API __declspec(dllexport) 00181 # else 00182 # define EQ_PLUGIN_API __declspec(dllimport) 00183 # endif 00184 #else // _WIN32 00185 # define EQ_PLUGIN_API __attribute__ ((visibility("default"))) 00186 #endif 00187 00192 #define EQ_COMPRESSOR_VERSION 4 00193 00194 #define EQ_COMPRESSOR_VERSION_1 1 00195 00196 #define EQ_COMPRESSOR_VERSION_2 1 00197 00198 #define EQ_COMPRESSOR_VERSION_3 1 00199 00200 #define EQ_COMPRESSOR_VERSION_4 1 00201 00203 #include <co/plugins/compressorTokens.h> 00204 #include <co/plugins/compressorTypes.h> 00205 00206 #ifdef __cplusplus 00207 # include <vector> 00208 00209 extern "C" { 00210 #endif 00211 00223 #define EQ_COMPRESSOR_INPLACE 0x1 00224 00229 #define EQ_COMPRESSOR_DATA_1D 0x2 00230 00236 #define EQ_COMPRESSOR_DATA_2D 0x4 00237 00254 #define EQ_COMPRESSOR_IGNORE_ALPHA 0x8 00255 00256 #define EQ_COMPRESSOR_IGNORE_MSE EQ_COMPRESSOR_IGNORE_ALPHA 00257 00264 #define EQ_COMPRESSOR_CPU 0 00265 00272 #define EQ_COMPRESSOR_TRANSFER 0x10 00273 00280 #define EQ_COMPRESSOR_USE_TEXTURE_RECT 0x20 00281 00287 #define EQ_COMPRESSOR_USE_TEXTURE_2D 0x80 00288 00294 #define EQ_COMPRESSOR_USE_FRAMEBUFFER 0x40 00295 00302 #define EQ_COMPRESSOR_USE_ASYNC_DOWNLOAD 0x100 00303 00304 #if 0 // Not implemented yet 00305 00311 #define EQ_COMPRESSOR_USE_ASYNC_UPLOAD 0x200 00312 #endif 00313 00318 struct EqCompressorInfo 00319 { 00328 unsigned version; 00329 00331 unsigned name; 00332 00341 unsigned tokenType; 00342 00344 eq_uint64_t capabilities; 00345 00347 float quality; 00348 00350 float ratio; 00351 00353 float speed; 00354 00367 unsigned outputTokenType; 00368 00370 unsigned outputTokenSize; 00371 }; 00372 00374 EQ_PLUGIN_API size_t EqCompressorGetNumCompressors(); 00375 00389 EQ_PLUGIN_API void EqCompressorGetInfo( const size_t n, 00390 EqCompressorInfo* const info ); 00410 EQ_PLUGIN_API void* EqCompressorNewCompressor( const unsigned name ); 00411 00418 EQ_PLUGIN_API void EqCompressorDeleteCompressor( void* const compressor ); 00419 00433 EQ_PLUGIN_API void* EqCompressorNewDecompressor( const unsigned name ); 00434 00441 EQ_PLUGIN_API void EqCompressorDeleteDecompressor(void* const decompressor); 00469 EQ_PLUGIN_API void EqCompressorCompress( void* const compressor, 00470 const unsigned name, 00471 void* const in, 00472 const eq_uint64_t* inDims, 00473 const eq_uint64_t flags ); 00474 00486 EQ_PLUGIN_API unsigned EqCompressorGetNumResults( void* const compressor, 00487 const unsigned name ); 00488 00499 EQ_PLUGIN_API void EqCompressorGetResult( void* const compressor, 00500 const unsigned name, 00501 const unsigned i, 00502 void** const out, 00503 eq_uint64_t* const outSize ); 00504 00525 EQ_PLUGIN_API void EqCompressorDecompress( void* const decompressor, 00526 const unsigned name, 00527 const void* const* in, 00528 const eq_uint64_t* const inSizes, 00529 const unsigned numInputs, 00530 void* const out, 00531 eq_uint64_t* const outDims, 00532 const eq_uint64_t flags ); 00551 EQ_PLUGIN_API bool EqCompressorIsCompatible( const unsigned name, 00552 const GLEWContext* glewContext ); 00553 00602 EQ_PLUGIN_API void EqCompressorDownload( void* const compressor, 00603 const unsigned name, 00604 const GLEWContext* glewContext, 00605 const eq_uint64_t inDims[4], 00606 const unsigned source, 00607 const eq_uint64_t flags, 00608 eq_uint64_t outDims[4], 00609 void** out ); 00610 00635 EQ_PLUGIN_API void EqCompressorStartDownload( void* const compressor, 00636 const unsigned name, 00637 const GLEWContext* glewContext, 00638 const eq_uint64_t inDims[4], 00639 const unsigned source, 00640 const eq_uint64_t flags ); 00641 00659 EQ_PLUGIN_API void EqCompressorFinishDownload( void* const compressor, 00660 const unsigned name, 00661 const GLEWContext* glewContext, 00662 const eq_uint64_t inDims[4], 00663 const eq_uint64_t flags, 00664 eq_uint64_t outDims[4], 00665 void** out ); 00666 00709 EQ_PLUGIN_API void EqCompressorUpload( void* const decompressor, 00710 const unsigned name, 00711 const GLEWContext* glewContext, 00712 const void* buffer, 00713 const eq_uint64_t inDims[4], 00714 const eq_uint64_t flags, 00715 const eq_uint64_t outDims[4], 00716 const unsigned destination ); 00717 #if 0 00718 // TODO: add EqCompressorStart/FinishUpload and document operations and 00719 // parameters 00720 #endif 00721 00723 #ifdef __cplusplus 00724 } 00725 #endif 00726 #endif // EQ_PLUGINS_COMPRESSOR