Panda3D
 All Classes Functions Variables Enumerations
graphicsStateGuardian.h
00001 // Filename: graphicsStateGuardian.h
00002 // Created by:  drose (02eb99)
00003 // Updated by: fperazzi, PandaSE (05May10) (added fetch_ptr_parameter,
00004 //  _max_2d_texture_array_layers on z axis, get_supports_cg_profile)
00005 //
00006 ////////////////////////////////////////////////////////////////////
00007 //
00008 // PANDA 3D SOFTWARE
00009 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00010 //
00011 // All use of this software is subject to the terms of the revised BSD
00012 // license.  You should have received a copy of this license along
00013 // with this source code in a file named "LICENSE."
00014 //
00015 ////////////////////////////////////////////////////////////////////
00016 
00017 #ifndef GRAPHICSSTATEGUARDIAN_H
00018 #define GRAPHICSSTATEGUARDIAN_H
00019 
00020 #include "pandabase.h"
00021 
00022 #include "frameBufferProperties.h"
00023 #include "preparedGraphicsObjects.h"
00024 #include "lens.h"
00025 #include "graphicsStateGuardianBase.h"
00026 #include "graphicsThreadingModel.h"
00027 #include "graphicsPipe.h"
00028 #include "sceneSetup.h"
00029 #include "displayRegion.h"
00030 #include "luse.h"
00031 #include "coordinateSystem.h"
00032 #include "factory.h"
00033 #include "pStatCollector.h"
00034 #include "transformState.h"
00035 #include "renderState.h"
00036 #include "light.h"
00037 #include "planeNode.h"
00038 #include "config_display.h"
00039 #include "geomMunger.h"
00040 #include "geomVertexData.h"
00041 #include "pnotify.h"
00042 #include "pvector.h"
00043 #include "shaderContext.h"
00044 #include "bitMask.h"
00045 #include "texture.h"
00046 #include "occlusionQueryContext.h"
00047 #include "stencilRenderStates.h"
00048 #include "loader.h"
00049 #include "textureAttrib.h"
00050 #include "texGenAttrib.h"
00051 #include "shaderAttrib.h"
00052 
00053 class DrawableRegion;
00054 class GraphicsEngine;
00055 class ShaderGenerator;
00056 
00057 ////////////////////////////////////////////////////////////////////
00058 //       Class : GraphicsStateGuardian
00059 // Description : Encapsulates all the communication with a particular
00060 //               instance of a given rendering backend.  Tries to
00061 //               guarantee that redundant state-change requests are
00062 //               not issued (hence "state guardian").
00063 //
00064 //               There will be one of these objects for each different
00065 //               graphics context active in the system.
00066 ////////////////////////////////////////////////////////////////////
00067 class EXPCL_PANDA_DISPLAY GraphicsStateGuardian : public GraphicsStateGuardianBase {
00068   //
00069   // Interfaces all GSGs should have
00070   //
00071 public:
00072   GraphicsStateGuardian(CoordinateSystem internal_coordinate_system,
00073                         GraphicsEngine *engine, GraphicsPipe *pipe);
00074   virtual ~GraphicsStateGuardian();
00075 
00076 PUBLISHED:
00077 
00078   enum ShaderModel
00079   {
00080     SM_00,
00081     SM_11,
00082     SM_20,
00083     SM_2X,
00084     SM_30,
00085     SM_40,
00086   };
00087 
00088   INLINE void release_all();
00089   INLINE int release_all_textures();
00090   INLINE int release_all_geoms();
00091   INLINE int release_all_vertex_buffers();
00092   INLINE int release_all_index_buffers();
00093 
00094   INLINE void set_active(bool active);
00095   INLINE bool is_active() const;
00096   INLINE bool is_valid() const;
00097   INLINE bool needs_reset() const;
00098 
00099   INLINE void set_incomplete_render(bool incomplete_render);
00100   virtual INLINE bool get_incomplete_render() const;
00101   virtual INLINE bool get_effective_incomplete_render() const;
00102 
00103   INLINE void set_loader(Loader *loader);
00104   INLINE Loader *get_loader() const;
00105 
00106   INLINE GraphicsPipe *get_pipe() const;
00107   GraphicsEngine *get_engine() const;
00108   INLINE const GraphicsThreadingModel &get_threading_model() const;
00109 
00110   INLINE bool is_hardware() const;
00111   virtual INLINE bool prefers_triangle_strips() const;
00112   virtual INLINE int get_max_vertices_per_array() const;
00113   virtual INLINE int get_max_vertices_per_primitive() const;
00114 
00115   INLINE int get_max_texture_stages() const;
00116   virtual INLINE int get_max_texture_dimension() const;
00117   INLINE int get_max_3d_texture_dimension() const;
00118   INLINE int get_max_2d_texture_array_layers() const; //z axis
00119   INLINE int get_max_cube_map_dimension() const;
00120 
00121   INLINE bool get_supports_texture_combine() const;
00122   INLINE bool get_supports_texture_saved_result() const;
00123   INLINE bool get_supports_texture_dot3() const;
00124 
00125   INLINE bool get_supports_3d_texture() const;
00126   INLINE bool get_supports_2d_texture_array() const;
00127   INLINE bool get_supports_cube_map() const;
00128   INLINE bool get_supports_tex_non_pow2() const;
00129 
00130   INLINE bool get_supports_compressed_texture() const;
00131   virtual INLINE bool get_supports_compressed_texture_format(int compression_mode) const;
00132 
00133   INLINE int get_max_lights() const;
00134   INLINE int get_max_clip_planes() const;
00135 
00136   INLINE int get_max_vertex_transforms() const;
00137   INLINE int get_max_vertex_transform_indices() const;
00138 
00139   INLINE bool get_copy_texture_inverted() const;
00140   virtual bool get_supports_multisample() const;
00141   INLINE bool get_supports_generate_mipmap() const;
00142   INLINE bool get_supports_depth_texture() const;
00143   INLINE bool get_supports_depth_stencil() const;
00144   INLINE bool get_supports_shadow_filter() const;
00145   INLINE bool get_supports_basic_shaders() const;
00146   INLINE bool get_supports_glsl() const;
00147   INLINE bool get_supports_stencil() const;
00148   INLINE bool get_supports_two_sided_stencil() const;
00149   INLINE bool get_supports_geometry_instancing() const;
00150 
00151   INLINE int get_maximum_simultaneous_render_targets() const;
00152 
00153   INLINE int get_shader_model() const;
00154   INLINE void set_shader_model(int shader_model);
00155 
00156   virtual int get_supported_geom_rendering() const;
00157   virtual bool get_supports_cg_profile(const string &name) const;
00158 
00159 
00160   INLINE bool get_color_scale_via_lighting() const;
00161   INLINE bool get_alpha_scale_via_texture() const;
00162   INLINE bool get_alpha_scale_via_texture(const TextureAttrib *tex_attrib) const;
00163   INLINE bool get_runtime_color_scale() const;
00164 
00165   INLINE static TextureStage *get_alpha_scale_texture_stage();
00166 
00167   void set_coordinate_system(CoordinateSystem cs);
00168   INLINE CoordinateSystem get_coordinate_system() const;
00169   virtual CoordinateSystem get_internal_coordinate_system() const;
00170 
00171   virtual PreparedGraphicsObjects *get_prepared_objects();
00172 
00173   virtual bool set_gamma(PN_stdfloat gamma);
00174   PN_stdfloat get_gamma(PN_stdfloat gamma);
00175   virtual void restore_gamma();
00176 
00177   INLINE void set_texture_quality_override(Texture::QualityLevel quality_level);
00178   INLINE Texture::QualityLevel get_texture_quality_override() const;
00179 
00180 #ifdef HAVE_PYTHON
00181   PyObject *get_prepared_textures() const;
00182 #endif
00183   typedef bool TextureCallback(TextureContext *tc, void *callback_arg);
00184   void traverse_prepared_textures(TextureCallback *func, void *callback_arg);
00185 
00186 #ifndef NDEBUG
00187   void set_flash_texture(Texture *tex);
00188   void clear_flash_texture();
00189   Texture *get_flash_texture() const;
00190 #endif
00191 
00192 PUBLISHED:
00193 
00194   virtual string get_driver_vendor();
00195   virtual string get_driver_renderer();
00196   virtual string get_driver_version();
00197   virtual int get_driver_version_major();
00198   virtual int get_driver_version_minor();
00199   virtual int get_driver_shader_version_major();
00200   virtual int get_driver_shader_version_minor();
00201   
00202   bool set_scene(SceneSetup *scene_setup);
00203   virtual SceneSetup *get_scene() const;
00204 
00205 public:
00206   virtual TextureContext *prepare_texture(Texture *tex);
00207   virtual bool update_texture(TextureContext *tc, bool force);
00208   virtual void release_texture(TextureContext *tc);
00209   virtual bool extract_texture_data(Texture *tex);
00210 
00211   virtual GeomContext *prepare_geom(Geom *geom);
00212   virtual void release_geom(GeomContext *gc);
00213 
00214   virtual ShaderContext *prepare_shader(Shader *shader);
00215   virtual void release_shader(ShaderContext *sc);
00216 
00217   virtual VertexBufferContext *prepare_vertex_buffer(GeomVertexArrayData *data);
00218   virtual void release_vertex_buffer(VertexBufferContext *vbc);
00219 
00220   virtual IndexBufferContext *prepare_index_buffer(GeomPrimitive *data);
00221   virtual void release_index_buffer(IndexBufferContext *ibc);
00222 
00223   virtual bool get_supports_occlusion_query() const;
00224   virtual void begin_occlusion_query();
00225   virtual PT(OcclusionQueryContext) end_occlusion_query();
00226 
00227   virtual PT(GeomMunger) get_geom_munger(const RenderState *state,
00228                                          Thread *current_thread);
00229   virtual PT(GeomMunger) make_geom_munger(const RenderState *state,
00230                                           Thread *current_thread);
00231 
00232   virtual void set_state_and_transform(const RenderState *state,
00233                                        const TransformState *transform);
00234 
00235   virtual PN_stdfloat compute_distance_to(const LPoint3 &point) const;
00236 
00237   virtual void clear(DrawableRegion *clearable);
00238   
00239   const LMatrix4 *fetch_specified_value(Shader::ShaderMatSpec &spec, int altered);
00240   const LMatrix4 *fetch_specified_part(Shader::ShaderMatInput input, InternalName *name, LMatrix4 &t);
00241   const Shader::ShaderPtrData *fetch_ptr_parameter(const Shader::ShaderPtrSpec& spec);
00242 
00243   virtual void prepare_display_region(DisplayRegionPipelineReader *dr);
00244   virtual void clear_before_callback();
00245   virtual void clear_state_and_transform();
00246 
00247   virtual void remove_window(GraphicsOutputBase *window);
00248 
00249   virtual CPT(TransformState) calc_projection_mat(const Lens *lens);
00250   virtual bool prepare_lens();
00251 
00252   virtual bool begin_frame(Thread *current_thread);
00253 PUBLISHED:
00254   virtual bool begin_scene();
00255   virtual void end_scene();
00256 public:
00257   virtual void end_frame(Thread *current_thread);
00258 
00259   void set_current_properties(const FrameBufferProperties *properties);
00260 
00261   virtual bool depth_offset_decals();
00262   virtual CPT(RenderState) begin_decal_base_first();
00263   virtual CPT(RenderState) begin_decal_nested();
00264   virtual CPT(RenderState) begin_decal_base_second();
00265   virtual void finish_decal();
00266 
00267   virtual bool begin_draw_primitives(const GeomPipelineReader *geom_reader,
00268                                      const GeomMunger *munger,
00269                                      const GeomVertexDataPipelineReader *data_reader,
00270                                      bool force);
00271   virtual bool draw_triangles(const GeomPrimitivePipelineReader *reader,
00272                               bool force);
00273   virtual bool draw_tristrips(const GeomPrimitivePipelineReader *reader,
00274                               bool force);
00275   virtual bool draw_trifans(const GeomPrimitivePipelineReader *reader,
00276                             bool force);
00277   virtual bool draw_lines(const GeomPrimitivePipelineReader *reader,
00278                           bool force);
00279   virtual bool draw_linestrips(const GeomPrimitivePipelineReader *reader,
00280                                bool force);
00281   virtual bool draw_points(const GeomPrimitivePipelineReader *reader,
00282                            bool force);
00283   virtual void end_draw_primitives();
00284 
00285   INLINE bool reset_if_new();
00286   INLINE void mark_new();
00287   virtual void reset();
00288 
00289   INLINE CPT(TransformState) get_external_transform() const;
00290   INLINE CPT(TransformState) get_internal_transform() const;
00291 
00292   RenderBuffer get_render_buffer(int buffer_type, const FrameBufferProperties &prop);
00293 
00294   INLINE const DisplayRegion *get_current_display_region() const;
00295   INLINE Lens::StereoChannel get_current_stereo_channel() const;
00296   INLINE int get_current_tex_view_offset() const;
00297   INLINE const Lens *get_current_lens() const;
00298 
00299   virtual const TransformState *get_cs_transform() const;
00300   INLINE const TransformState *get_inv_cs_transform() const;
00301 
00302   void do_issue_clip_plane();
00303   void do_issue_color();
00304   void do_issue_color_scale();
00305   virtual void do_issue_light();
00306 
00307   virtual bool framebuffer_copy_to_texture
00308   (Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb);
00309   virtual bool framebuffer_copy_to_ram
00310   (Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb);
00311 
00312   virtual void bind_light(PointLight *light_obj, const NodePath &light,
00313                           int light_id);
00314   virtual void bind_light(DirectionalLight *light_obj, const NodePath &light,
00315                           int light_id);
00316   virtual void bind_light(Spotlight *light_obj, const NodePath &light,
00317                           int light_id);
00318 
00319   static void create_gamma_table (PN_stdfloat gamma, unsigned short *red_table, unsigned short *green_table, unsigned short *blue_table);
00320 
00321   virtual PT(Texture) make_shadow_buffer(const NodePath &light_np, GraphicsOutputBase *host);
00322 
00323 #ifdef DO_PSTATS
00324   static void init_frame_pstats();
00325 #endif
00326 
00327 protected:
00328   virtual void reissue_transforms();
00329 
00330   virtual void enable_lighting(bool enable);
00331   virtual void set_ambient_light(const LColor &color);
00332   virtual void enable_light(int light_id, bool enable);
00333   virtual void begin_bind_lights();
00334   virtual void end_bind_lights();
00335 
00336   virtual void enable_clip_planes(bool enable);
00337   virtual void enable_clip_plane(int plane_id, bool enable);
00338   virtual void begin_bind_clip_planes();
00339   virtual void bind_clip_plane(const NodePath &plane, int plane_id);
00340   virtual void end_bind_clip_planes();
00341 
00342   void determine_target_texture();
00343 
00344   virtual void free_pointers();
00345   virtual void close_gsg();
00346   void panic_deactivate();
00347 
00348   void determine_light_color_scale();
00349 
00350   static CPT(RenderState) get_unlit_state();
00351   static CPT(RenderState) get_unclipped_state();
00352   static CPT(RenderState) get_untextured_state();
00353 
00354   void async_reload_texture(TextureContext *tc);
00355 
00356 protected:
00357   PT(SceneSetup) _scene_null;
00358   PT(SceneSetup) _scene_setup;
00359 
00360   // The current state of the graphics context, as of the last call to
00361   // set_state_and_transform().
00362   CPT(RenderState) _state_rs;
00363 
00364   // The desired state of the graphics context, during processing of
00365   // set_state_and_transform().
00366   CPT(RenderState) _target_rs;
00367 
00368   // This bitmask contains a 1 bit everywhere that _state_rs has a
00369   // known value.  If a bit is 0, the corresponding state must be
00370   // re-sent.
00371   // 
00372   // Derived GSGs should initialize _inv_state_mask in reset() as a mask of
00373   // 1's where they don't care, and 0's where they do care, about the state.
00374   RenderState::SlotMask _state_mask;
00375   RenderState::SlotMask _inv_state_mask;
00376 
00377   // The current transform, as of the last call to
00378   // set_state_and_transform().
00379   CPT(TransformState) _internal_transform;
00380 
00381   // The current TextureAttrib is a special case; we may further
00382   // restrict it (according to graphics cards limits) or extend it
00383   // (according to ColorScaleAttribs in effect) beyond what is
00384   // specifically requested in the scene graph.
00385   CPT(TextureAttrib) _target_texture;
00386   CPT(TextureAttrib) _state_texture;
00387   CPT(TexGenAttrib) _target_tex_gen;
00388   CPT(TexGenAttrib) _state_tex_gen;
00389 
00390   // Also, the shader might be the explicitly-requested shader, or it
00391   // might be an auto-generated one.
00392   CPT(ShaderAttrib) _state_shader;
00393   CPT(ShaderAttrib) _target_shader;
00394 
00395   // These are set by begin_draw_primitives(), and are only valid
00396   // between begin_draw_primitives() and end_draw_primitives().
00397   CPT(GeomMunger) _munger;
00398   const GeomVertexDataPipelineReader *_data_reader;
00399 
00400   unsigned int _color_write_mask;
00401 
00402   CPT(DisplayRegion) _current_display_region;
00403   Lens::StereoChannel _current_stereo_channel;
00404   int _current_tex_view_offset;
00405   CPT(Lens) _current_lens;
00406   CPT(TransformState) _projection_mat;
00407   CPT(TransformState) _projection_mat_inv;
00408   const FrameBufferProperties *_current_properties;
00409 
00410   CoordinateSystem _coordinate_system;
00411   CoordinateSystem _internal_coordinate_system;
00412   CPT(TransformState) _cs_transform;
00413   CPT(TransformState) _inv_cs_transform;
00414 
00415   LColor _scene_graph_color;
00416   bool _has_scene_graph_color;
00417   bool _transform_stale;
00418   bool _color_blend_involves_color_scale;
00419   bool _texture_involves_color_scale;
00420   bool _vertex_colors_enabled;
00421   bool _lighting_enabled;
00422   bool _clip_planes_enabled;
00423   bool _color_scale_enabled;
00424   LVecBase4 _current_color_scale;
00425 
00426   bool _has_material_force_color;
00427   LColor _material_force_color;
00428   LVecBase4 _light_color_scale;
00429   bool _has_texture_alpha_scale;
00430 
00431   bool _tex_gen_modifies_mat;
00432   bool _tex_gen_point_sprite;
00433   int _last_max_stage_index;
00434 
00435   bool _needs_reset;
00436   bool _is_valid;
00437   bool _closing_gsg;
00438   bool _active;
00439   bool _incomplete_render;
00440   bool _effective_incomplete_render;
00441   PT(Loader) _loader;
00442 
00443   PT(PreparedGraphicsObjects) _prepared_objects;
00444 
00445   bool _is_hardware;
00446   bool _prefers_triangle_strips;
00447   int _max_vertices_per_array;
00448   int _max_vertices_per_primitive;
00449 
00450   int _max_texture_stages;
00451   int _max_texture_dimension;
00452   int _max_3d_texture_dimension;
00453   int _max_2d_texture_array_layers; //on the z axis
00454   int _max_cube_map_dimension;
00455 
00456   bool _supports_texture_combine;
00457   bool _supports_texture_saved_result;
00458   bool _supports_texture_dot3;
00459 
00460   bool _supports_3d_texture;
00461   bool _supports_2d_texture_array;
00462   bool _supports_cube_map;
00463   bool _supports_tex_non_pow2;
00464 
00465   bool _supports_compressed_texture;
00466   BitMask32 _compressed_texture_formats;
00467 
00468   int _max_lights;
00469   int _max_clip_planes;
00470 
00471   int _max_vertex_transforms;
00472   int _max_vertex_transform_indices;
00473 
00474   bool _supports_occlusion_query;
00475   PT(OcclusionQueryContext) _current_occlusion_query;
00476 
00477   bool _copy_texture_inverted;
00478   bool _supports_multisample;
00479   bool _supports_generate_mipmap;
00480   bool _supports_depth_texture;
00481   bool _supports_depth_stencil;
00482   bool _supports_shadow_filter;
00483   bool _supports_basic_shaders;
00484   bool _supports_glsl;
00485   bool _supports_framebuffer_multisample;
00486   bool _supports_framebuffer_blit;
00487   
00488   bool _supports_stencil;
00489   bool _supports_stencil_wrap;
00490   bool _supports_two_sided_stencil;
00491   bool _supports_geometry_instancing;
00492 
00493   int _maximum_simultaneous_render_targets;
00494 
00495   int  _supported_geom_rendering;
00496   bool _color_scale_via_lighting;
00497   bool _alpha_scale_via_texture;
00498   bool _runtime_color_scale;
00499 
00500   int  _stereo_buffer_mask;
00501 
00502   StencilRenderStates *_stencil_render_states;
00503 
00504   int _auto_detect_shader_model;
00505   int _shader_model;
00506 
00507   static PT(TextureStage) _alpha_scale_texture_stage;
00508 
00509   Shader::ShaderCaps _shader_caps;
00510 
00511   PN_stdfloat _gamma;
00512   Texture::QualityLevel _texture_quality_override;
00513   
00514   ShaderGenerator* _shader_generator;
00515 
00516 #ifndef NDEBUG
00517   PT(Texture) _flash_texture;
00518 #endif
00519   
00520 public:
00521   // Statistics
00522   static PStatCollector _vertex_buffer_switch_pcollector;
00523   static PStatCollector _index_buffer_switch_pcollector;
00524   static PStatCollector _load_vertex_buffer_pcollector;
00525   static PStatCollector _load_index_buffer_pcollector;
00526   static PStatCollector _create_vertex_buffer_pcollector;
00527   static PStatCollector _create_index_buffer_pcollector;
00528   static PStatCollector _load_texture_pcollector;
00529   static PStatCollector _data_transferred_pcollector;
00530   static PStatCollector _texmgrmem_total_pcollector;
00531   static PStatCollector _texmgrmem_resident_pcollector;
00532   static PStatCollector _primitive_batches_pcollector;
00533   static PStatCollector _primitive_batches_tristrip_pcollector;
00534   static PStatCollector _primitive_batches_trifan_pcollector;
00535   static PStatCollector _primitive_batches_tri_pcollector;
00536   static PStatCollector _primitive_batches_other_pcollector;
00537   static PStatCollector _vertices_tristrip_pcollector;
00538   static PStatCollector _vertices_trifan_pcollector;
00539   static PStatCollector _vertices_tri_pcollector;
00540   static PStatCollector _vertices_other_pcollector;
00541   static PStatCollector _vertices_indexed_tristrip_pcollector;
00542   static PStatCollector _state_pcollector;
00543   static PStatCollector _transform_state_pcollector;
00544   static PStatCollector _texture_state_pcollector;
00545   static PStatCollector _draw_primitive_pcollector;
00546   static PStatCollector _draw_set_state_pcollector;
00547   static PStatCollector _clear_pcollector;
00548   static PStatCollector _flush_pcollector;
00549   static PStatCollector _wait_occlusion_pcollector;
00550 
00551   // A whole slew of collectors to measure the cost of individual
00552   // state changes.  These are disabled by default.
00553   static PStatCollector _draw_set_state_transform_pcollector;
00554   static PStatCollector _draw_set_state_alpha_test_pcollector;
00555   static PStatCollector _draw_set_state_antialias_pcollector;
00556   static PStatCollector _draw_set_state_clip_plane_pcollector;
00557   static PStatCollector _draw_set_state_color_pcollector;
00558   static PStatCollector _draw_set_state_cull_face_pcollector;
00559   static PStatCollector _draw_set_state_depth_offset_pcollector;
00560   static PStatCollector _draw_set_state_depth_test_pcollector;
00561   static PStatCollector _draw_set_state_depth_write_pcollector;
00562   static PStatCollector _draw_set_state_render_mode_pcollector;
00563   static PStatCollector _draw_set_state_rescale_normal_pcollector;
00564   static PStatCollector _draw_set_state_shade_model_pcollector;
00565   static PStatCollector _draw_set_state_blending_pcollector;
00566   static PStatCollector _draw_set_state_shader_pcollector;
00567   static PStatCollector _draw_set_state_shader_parameters_pcollector;
00568   static PStatCollector _draw_set_state_texture_pcollector;
00569   static PStatCollector _draw_set_state_tex_matrix_pcollector;
00570   static PStatCollector _draw_set_state_tex_gen_pcollector;
00571   static PStatCollector _draw_set_state_material_pcollector;
00572   static PStatCollector _draw_set_state_light_pcollector;
00573   static PStatCollector _draw_set_state_stencil_pcollector;
00574   static PStatCollector _draw_set_state_fog_pcollector;
00575   static PStatCollector _draw_set_state_scissor_pcollector;
00576 
00577 private:
00578   int _num_lights_enabled;
00579   int _num_clip_planes_enabled;
00580 
00581   PT(GraphicsPipe) _pipe;
00582   GraphicsEngine *_engine;
00583   GraphicsThreadingModel _threading_model;
00584 
00585 public:
00586   static TypeHandle get_class_type() {
00587     return _type_handle;
00588   }
00589 
00590 public:
00591   static void init_type() {
00592     GraphicsStateGuardianBase::init_type();
00593     register_type(_type_handle, "GraphicsStateGuardian",
00594                   GraphicsStateGuardianBase::get_class_type());
00595   }
00596   virtual TypeHandle get_type() const {
00597     return get_class_type();
00598   }
00599   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00600 
00601 private:
00602   static TypeHandle _type_handle;
00603 
00604   friend class GraphicsPipe;
00605   friend class GraphicsWindow;
00606   friend class GraphicsEngine;
00607 };
00608 
00609 #include "graphicsStateGuardian.I"
00610 
00611 #endif
 All Classes Functions Variables Enumerations