00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef MMSFBBUFFER_H_
00034 #define MMSFBBUFFER_H_
00035
00036 #include "mmstools/base.h"
00037 #include "mmstools/mmstypes.h"
00038 #include "mmsgui/fb/mmsfbgl.h"
00039 #include <stdlib.h>
00040
00041 class MMSFBBuffer {
00042 public:
00043
00044 typedef struct {
00045
00046 MMS_INDEX_ARRAY *arrays;
00047
00048 unsigned short int max_arrays;
00049
00050 unsigned short int num_arrays;
00051 } INDEX_BUFFER;
00052
00053
00054 typedef struct {
00055
00056 MMS_VERTEX_ARRAY *arrays;
00057
00058 unsigned short int max_arrays;
00059
00060 unsigned short int num_arrays;
00061 } VERTEX_BUFFER;
00062
00063
00064 typedef enum {
00065
00066 BUFFER_TYPE_NOTSET = 0,
00067
00068 BUFFER_TYPE_INDEX_VERTEX
00069 } BUFFER_TYPE;
00070
00071
00072 typedef struct {
00073
00074 unsigned int bo;
00075
00076 MMS_INDEX_BUFFER *buffers;
00077
00078 unsigned short int num_buffers;
00079 } INDEX_BUFFER_OBJECT;
00080
00081
00082 typedef struct {
00083
00084 unsigned int bo;
00085
00086 MMS_VERTEX_BUFFER *buffers;
00087
00088 unsigned short int num_buffers;
00089 } VERTEX_BUFFER_OBJECT;
00090
00091
00092 class EXTKEY {
00093 public:
00094
00095 bool initialized;
00096
00097
00098 unsigned int use_count;
00099
00100
00101 unsigned int key;
00102
00103 #ifdef __HAVE_OPENGL__
00104
00105 unsigned int ibo;
00106 unsigned int ibo_size;
00107 unsigned int ibo_used;
00108
00109
00110 unsigned int vbo;
00111 unsigned int vbo_size;
00112 unsigned int vbo_used;
00113 #endif
00114
00115 EXTKEY(unsigned int key);
00116 ~EXTKEY();
00117 bool allocVertexArray(unsigned int size);
00118 bool reserveIndexArray(unsigned int requested_size, unsigned int *offset);
00119 bool reserveVertexArray(unsigned int requested_size, unsigned int *offset);
00120 };
00121
00122
00123 class BUFFER {
00124 public:
00125
00126 bool initialized;
00127
00128
00129 unsigned int use_count;
00130
00131
00132 BUFFER_TYPE type;
00133
00134
00135 INDEX_BUFFER index_buffer;
00136
00137
00138 VERTEX_BUFFER vertex_buffer;
00139
00140 #ifdef __HAVE_OPENGL__
00141
00142 INDEX_BUFFER_OBJECT index_bo;
00143
00144
00145 VERTEX_BUFFER_OBJECT vertex_bo;
00146 #endif
00147
00148 BUFFER();
00149 ~BUFFER();
00150 void initIndexBuffer(EXTKEY *extkey, INDEX_BUFFER index_buffer);
00151 void initVertexBuffer(EXTKEY *extkey, VERTEX_BUFFER vertex_buffer);
00152 bool getBuffers(MMSFBBuffer::INDEX_BUFFER **index_buffer, MMSFBBuffer::VERTEX_BUFFER **vertex_buffer);
00153 #ifdef __HAVE_OPENGL__
00154 bool getBufferObjects(MMSFBBuffer::INDEX_BUFFER_OBJECT **index_bo, MMSFBBuffer::VERTEX_BUFFER_OBJECT **vertex_bo);
00155 #endif
00156 };
00157
00158 private:
00159
00160
00161 unsigned long long ext_id;
00162
00163
00164 typedef std::map<unsigned int, MMSFBBuffer::EXTKEY*> EXTKEY_INDEX;
00165
00166
00167 static EXTKEY_INDEX extkey_index;
00168
00169
00170 EXTKEY *extkey;
00171
00172
00173 typedef std::map<unsigned long long, MMSFBBuffer::BUFFER*> BUFFER_INDEX;
00174
00175
00176 static BUFFER_INDEX buffer_index;
00177
00178
00179 BUFFER *buffer;
00180
00181 public:
00182 MMSFBBuffer(unsigned int extkey, unsigned int subkey);
00183 ~MMSFBBuffer();
00184 bool isInitialized();
00185 bool getExtKey(MMSFBBuffer::EXTKEY **extkey);
00186 bool initBuffer(INDEX_BUFFER index_buffer, VERTEX_BUFFER vertex_buffer);
00187 bool getBuffer(MMSFBBuffer::BUFFER **buffer);
00188 };
00189
00190 #endif
00191
00192
00193