00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef GRAPHICSPIPESELECTION_H
00016 #define GRAPHICSPIPESELECTION_H
00017
00018 #include "pandabase.h"
00019
00020 #include "graphicsPipe.h"
00021 #include "pointerTo.h"
00022 #include "typeHandle.h"
00023 #include "lightMutex.h"
00024 #include "vector_string.h"
00025
00026 class HardwareChannel;
00027 class GraphicsWindow;
00028
00029
00030
00031
00032
00033
00034
00035
00036 class EXPCL_PANDA_DISPLAY GraphicsPipeSelection {
00037 protected:
00038 GraphicsPipeSelection();
00039 ~GraphicsPipeSelection();
00040
00041 PUBLISHED:
00042 int get_num_pipe_types() const;
00043 TypeHandle get_pipe_type(int n) const;
00044 MAKE_SEQ(get_pipe_types, get_num_pipe_types, get_pipe_type);
00045 void print_pipe_types() const;
00046
00047 PT(GraphicsPipe) make_pipe(const string &type_name,
00048 const string &module_name = string());
00049 PT(GraphicsPipe) make_pipe(TypeHandle type);
00050 PT(GraphicsPipe) make_module_pipe(const string &module_name);
00051 PT(GraphicsPipe) make_default_pipe();
00052
00053 INLINE int get_num_aux_modules() const;
00054 void load_aux_modules();
00055
00056 INLINE static GraphicsPipeSelection *get_global_ptr();
00057
00058 public:
00059 typedef PT(GraphicsPipe) PipeConstructorFunc();
00060 bool add_pipe_type(TypeHandle type, PipeConstructorFunc *func);
00061
00062 private:
00063 INLINE void load_default_module() const;
00064 void do_load_default_module();
00065 TypeHandle load_named_module(const string &name);
00066
00067 class LoadedModule {
00068 public:
00069 string _module_name;
00070 void *_module_handle;
00071 TypeHandle _default_pipe_type;
00072 };
00073 typedef pmap<string, LoadedModule> LoadedModules;
00074 LoadedModules _loaded_modules;
00075 LightMutex _loaded_modules_lock;
00076
00077 class PipeType {
00078 public:
00079 INLINE PipeType(TypeHandle type, PipeConstructorFunc *constructor);
00080 TypeHandle _type;
00081 PipeConstructorFunc *_constructor;
00082 };
00083 typedef pvector<PipeType> PipeTypes;
00084 PipeTypes _pipe_types;
00085 LightMutex _lock;
00086
00087 typedef vector_string DisplayModules;
00088 DisplayModules _display_modules;
00089 string _default_display_module;
00090 string _default_pipe_name;
00091 bool _default_module_loaded;
00092
00093 static GraphicsPipeSelection *_global_ptr;
00094 };
00095
00096 #include "graphicsPipeSelection.I"
00097
00098 #endif
00099