00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _FG_JPGFACTORY_HXX
00024 #define _FG_JPGFACTORY_HXX
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 #ifdef HAVE_WINDOWS_H
00031 # define XMD_H // to avoid INT32 redefinition
00032 #endif
00033
00034 #include <stdlib.h>
00035 #include <stdio.h>
00036 #include <jpeglib.h>
00037 #include <jerror.h>
00038
00039 #ifdef __cplusplus
00040 }
00041 #endif
00042
00043 #include <simgear/screen/tr.h>
00044
00045
00046 extern void (*jpgRenderFrame)(void);
00047
00048
00049 class trJpgFactory {
00050 private:
00051 int imageWidth;
00052 int imageHeight;
00053 GLubyte *tile;
00054 GLubyte *buffer;
00055
00056 TRcontext *tr;
00057 unsigned char *IMAGE;
00058 int IMAGESIZE;
00059
00060 struct jpeg_compress_struct cinfo;
00061 struct jpeg_error_mgr jerr;
00062
00063 int jpeg_init();
00064 int compress();
00065
00066 typedef enum {
00067 DEFAULT_XS = 320,
00068 DEFAULT_YS = 240
00069 } JPG_FACTORY_ENUM;
00070
00071 public:
00072 trJpgFactory();
00073 ~trJpgFactory();
00074
00075 int init(int width = 0, int height = 0 );
00076 void destroy(int error = 0);
00077
00078 int render();
00079 void setFrustum(GLdouble left, GLdouble right,
00080 GLdouble bottom, GLdouble top,
00081 GLdouble zNear, GLdouble zFar) { trFrustum(tr, left, right, bottom, top, zNear, zFar); }
00082
00083 unsigned char *data() { return IMAGE ; }
00084
00085 struct jpeg_compress_struct *JPGinfo() { return &cinfo ; }
00086 };
00087
00088 #endif // #ifndef _FG_JPGFACTORY_HXX