149 lines
4 KiB
C
149 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*/
|