historical/toontown-classic.git/panda/include/meshDrawer2D.h
2024-01-16 11:20:27 -06:00

148 lines
4 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file meshDrawer2D.h
* @author treeform
* @date 2010-01-06
*/
#ifndef MESHDRAWER2D_H
#define MESHDRAWER2D_H
#include "pandabase.h"
#include "luse.h"
#include "pandaNode.h"
#include "pointerTo.h"
#include "lpoint2.h"
#include "lvecBase2.h"
#include "pnmImage.h"
#include "nodePath.h"
#include "texture.h"
#include "geomVertexFormat.h"
#include "geomVertexArrayFormat.h"
#include "geomVertexData.h"
#include "geomVertexWriter.h"
#include "geomVertexRewriter.h"
#include "boundingVolume.h"
#include "nodePathCollection.h"
#include "geomTristrips.h"
#include "geomTriangles.h"
#include "geom.h"
#include "geomNode.h"
#include "nodePath.h"
/**
* This class allows the drawing of 2d objects - mainly based on quads and
* rectangles. Allows clipping and serverl high level UI theme functions.
*/
class EXPCL_PANDA_GRUTIL MeshDrawer2D : public TypedObject {
PUBLISHED:
INLINE MeshDrawer2D();
INLINE ~MeshDrawer2D();
INLINE void set_budget(int budget);
INLINE int get_budget();
INLINE NodePath get_root();
INLINE void quad_raw(
const LVector3 &v1, const LVector4 &c1, const LVector2 &uv1,
const LVector3 &v2, const LVector4 &c2, const LVector2 &uv2,
const LVector3 &v3, const LVector4 &c3, const LVector2 &uv3,
const LVector3 &v4, const LVector4 &c4, const LVector2 &uv4);
INLINE void rectangle_raw(
PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h,
PN_stdfloat u, PN_stdfloat v, PN_stdfloat us, PN_stdfloat vs,
const LVector4 &color);
INLINE void set_clip(PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h);
INLINE void rectangle(
PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h,
PN_stdfloat u, PN_stdfloat v, PN_stdfloat us, PN_stdfloat vs,
const LVector4 &color);
void rectangle_border(
PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h,
PN_stdfloat r, PN_stdfloat t, PN_stdfloat l, PN_stdfloat b,
PN_stdfloat tr, PN_stdfloat tt, PN_stdfloat tl, PN_stdfloat tb,
PN_stdfloat u, PN_stdfloat v, PN_stdfloat us, PN_stdfloat vs,
const LVector4 &color);
void rectangle_border_tiled(
PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h,
PN_stdfloat r, PN_stdfloat t, PN_stdfloat l, PN_stdfloat b,
PN_stdfloat tr, PN_stdfloat tt, PN_stdfloat tl, PN_stdfloat tb,
PN_stdfloat u, PN_stdfloat v, PN_stdfloat us, PN_stdfloat vs,
const LVector4 &color);
void rectangle_tiled(
PN_stdfloat x, PN_stdfloat y, PN_stdfloat w, PN_stdfloat h,
PN_stdfloat u, PN_stdfloat v, PN_stdfloat us, PN_stdfloat vs,
const LVector4 &color);
void begin();
void end();
private:
// use vars
NodePath _root;
int _budget;
// clip
PN_stdfloat _clip_x;
PN_stdfloat _clip_y;
PN_stdfloat _clip_w;
PN_stdfloat _clip_h;
// store regeneration geoms & nodes
PT(Geom) _geom;
PT(GeomNode) _geomnode;
PT(GeomVertexData) _vdata;
PT(GeomTriangles) _prim;
CPT(GeomPrimitive) _dprim;
// writers
GeomVertexRewriter *_vertex;
GeomVertexRewriter *_uv;
GeomVertexRewriter *_color;
// clear indexes
int _last_clear_index, _start_clear_index, _end_clear_index, _clear_index;
// bounding volume
PT(BoundingVolume) _bv;
// private create all the needed geoms
void generator(int budget);
public:
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
TypedObject::init_type();
register_type(_type_handle, "MeshDrawer2D",
TypedObject::get_class_type());
}
virtual TypeHandle get_type() const {
return get_class_type();
}
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
private:
static TypeHandle _type_handle;
};
#include "meshDrawer2D.I"
#endif /*MESHDRAWER2D_H*/