00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GRAPHICSSTATEGUARDIANBASE_H
00020 #define GRAPHICSSTATEGUARDIANBASE_H
00021
00022 #include "pandabase.h"
00023
00024 #include "typedReferenceCount.h"
00025 #include "luse.h"
00026
00027
00028
00029 class RenderBuffer;
00030 class GraphicsWindow;
00031
00032 class GeomContext;
00033 class GeomNodeContext;
00034 class GeomNode;
00035 class Geom;
00036 class GeomPoint;
00037 class GeomLine;
00038 class GeomLinestrip;
00039 class GeomSprite;
00040 class GeomPolygon;
00041 class GeomQuad;
00042 class GeomTri;
00043 class GeomTristrip;
00044 class GeomTrifan;
00045 class GeomSphere;
00046
00047 class TextureContext;
00048 class Texture;
00049 class PixelBuffer;
00050 class RenderState;
00051 class TransformState;
00052
00053 class Material;
00054
00055 class ColorScaleAttrib;
00056 class TexMatrixAttrib;
00057 class ColorAttrib;
00058 class TextureAttrib;
00059 class LightAttrib;
00060 class MaterialAttrib;
00061 class RenderModeAttrib;
00062 class ColorBlendAttrib;
00063 class TextureApplyAttrib;
00064 class ColorWriteAttrib;
00065 class AlphaTestAttrib;
00066 class DepthTestAttrib;
00067 class DepthWriteAttrib;
00068 class TexGenAttrib;
00069 class CullFaceAttrib;
00070 class StencilAttrib;
00071 class ClipPlaneAttrib;
00072 class TransparencyAttrib;
00073 class FogAttrib;
00074 class LinesmoothAttrib;
00075 class PointShapeAttrib;
00076 class DepthOffsetAttrib;
00077
00078 class PointLight;
00079 class DirectionalLight;
00080 class Spotlight;
00081 class AmbientLight;
00082
00083 class DisplayRegion;
00084 class Lens;
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 class EXPCL_PANDA GraphicsStateGuardianBase : public TypedReferenceCount {
00097 public:
00098
00099
00100
00101 virtual bool wants_normals(void) const=0;
00102 virtual bool wants_texcoords(void) const=0;
00103 virtual bool wants_colors(void) const=0;
00104
00105
00106
00107
00108 virtual TextureContext *prepare_texture(Texture *tex)=0;
00109 virtual void apply_texture(TextureContext *tc)=0;
00110 virtual void release_texture(TextureContext *tc)=0;
00111
00112 virtual GeomNodeContext *prepare_geom_node(GeomNode *node)=0;
00113 virtual void draw_geom_node(GeomNode *node, const RenderState *state,
00114 GeomNodeContext *gnc)=0;
00115 virtual void release_geom_node(GeomNodeContext *gnc)=0;
00116
00117 virtual GeomContext *prepare_geom(Geom *geom)=0;
00118 virtual void release_geom(GeomContext *gc)=0;
00119
00120 virtual void set_state_and_transform(const RenderState *state,
00121 const TransformState *transform)=0;
00122
00123
00124
00125
00126
00127
00128 virtual float compute_distance_to(const LPoint3f &point) const=0;
00129
00130
00131
00132
00133
00134 virtual bool depth_offset_decals()=0;
00135 virtual CPT(RenderState) begin_decal_base_first()=0;
00136 virtual CPT(RenderState) begin_decal_nested()=0;
00137 virtual CPT(RenderState) begin_decal_base_second()=0;
00138 virtual void finish_decal()=0;
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 virtual void draw_point(GeomPoint *geom, GeomContext *gc)=0;
00149 virtual void draw_line(GeomLine *geom, GeomContext *gc)=0;
00150 virtual void draw_linestrip(GeomLinestrip *geom, GeomContext *gc)=0;
00151 virtual void draw_sprite(GeomSprite *geom, GeomContext *gc)=0;
00152 virtual void draw_polygon(GeomPolygon *geom, GeomContext *gc)=0;
00153 virtual void draw_quad(GeomQuad *geom, GeomContext *gc)=0;
00154 virtual void draw_tri(GeomTri *geom, GeomContext *gc)=0;
00155 virtual void draw_tristrip(GeomTristrip *geom, GeomContext *gc)=0;
00156 virtual void draw_trifan(GeomTrifan *geom, GeomContext *gc)=0;
00157 virtual void draw_sphere(GeomSphere *geom, GeomContext *gc)=0;
00158
00159 virtual void copy_texture(TextureContext *tc, const DisplayRegion *dr)=0;
00160 virtual void copy_texture(TextureContext *tc, const DisplayRegion *dr,
00161 const RenderBuffer &rb)=0;
00162
00163 virtual void texture_to_pixel_buffer(TextureContext *tc, PixelBuffer *pb)=0;
00164 virtual void texture_to_pixel_buffer(TextureContext *tc, PixelBuffer *pb,
00165 const DisplayRegion *dr)=0;
00166
00167 virtual void copy_pixel_buffer(PixelBuffer *pb, const DisplayRegion *dr)=0;
00168 virtual void copy_pixel_buffer(PixelBuffer *pb, const DisplayRegion *dr,
00169 const RenderBuffer &rb)=0;
00170
00171 virtual void apply_material(const Material *material)=0;
00172
00173 virtual void issue_transform(const TransformState *) { }
00174 virtual void issue_alpha_test(const AlphaTestAttrib *) { }
00175 virtual void issue_color_scale(const ColorScaleAttrib *) { }
00176 virtual void issue_color(const ColorAttrib *) { }
00177 virtual void issue_tex_matrix(const TexMatrixAttrib *) { }
00178 virtual void issue_texture(const TextureAttrib *) { }
00179 virtual void issue_light(const LightAttrib *) { }
00180 virtual void issue_material(const MaterialAttrib *) { }
00181 virtual void issue_render_mode(const RenderModeAttrib *) { }
00182 virtual void issue_texture_apply(const TextureApplyAttrib *) { }
00183 virtual void issue_color_write(const ColorWriteAttrib *) { }
00184 virtual void issue_depth_test(const DepthTestAttrib *) { }
00185 virtual void issue_depth_write(const DepthWriteAttrib *) { }
00186 virtual void issue_cull_face(const CullFaceAttrib *) { }
00187 virtual void issue_transparency(const TransparencyAttrib *) { }
00188 virtual void issue_fog(const FogAttrib *) { }
00189 virtual void issue_depth_offset(const DepthOffsetAttrib *) { }
00190 virtual void issue_color_blend(const ColorBlendAttrib *) { }
00191 virtual void issue_tex_gen(const TexGenAttrib *) { }
00192 virtual void issue_stencil(const StencilAttrib *) { }
00193 virtual void issue_clip_plane(const ClipPlaneAttrib *) { }
00194
00195 virtual void bind_light(PointLight *light, int light_id) { }
00196 virtual void bind_light(DirectionalLight *light, int light_id) { }
00197 virtual void bind_light(Spotlight *light, int light_id) { }
00198
00199 PUBLISHED:
00200 static TypeHandle get_class_type() {
00201 return _type_handle;
00202 }
00203
00204 public:
00205 static void init_type() {
00206 TypedReferenceCount::init_type();
00207 register_type(_type_handle, "GraphicsStateGuardianBase",
00208 TypedReferenceCount::get_class_type());
00209 }
00210 virtual TypeHandle get_type() const {
00211 return get_class_type();
00212 }
00213 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00214
00215 private:
00216 static TypeHandle _type_handle;
00217 };
00218
00219 #endif