133 lines
3.2 KiB
C++
133 lines
3.2 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 geomLinesAdjacency.cxx
|
|
* @author rdb
|
|
* @date 2018-03-01
|
|
*/
|
|
|
|
#include "geomLinesAdjacency.h"
|
|
#include "pStatTimer.h"
|
|
#include "bamReader.h"
|
|
#include "bamWriter.h"
|
|
#include "graphicsStateGuardianBase.h"
|
|
#include "geomVertexReader.h"
|
|
#include "geomVertexWriter.h"
|
|
|
|
TypeHandle GeomLinesAdjacency::_type_handle;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
GeomLinesAdjacency::
|
|
GeomLinesAdjacency(GeomEnums::UsageHint usage_hint) :
|
|
GeomPrimitive(usage_hint)
|
|
{
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
GeomLinesAdjacency::
|
|
GeomLinesAdjacency(const GeomLinesAdjacency ©) :
|
|
GeomPrimitive(copy)
|
|
{
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
GeomLinesAdjacency::
|
|
~GeomLinesAdjacency() {
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
PT(GeomPrimitive) GeomLinesAdjacency::
|
|
make_copy() const {
|
|
return new GeomLinesAdjacency(*this);
|
|
}
|
|
|
|
/**
|
|
* Returns the fundamental rendering type of this primitive: whether it is
|
|
* points, lines, or polygons.
|
|
*
|
|
* This is used to set up the appropriate antialiasing settings when
|
|
* AntialiasAttrib::M_auto is in effect; it also implies the type of primitive
|
|
* that will be produced when decompose() is called.
|
|
*/
|
|
GeomPrimitive::PrimitiveType GeomLinesAdjacency::
|
|
get_primitive_type() const {
|
|
return PT_lines;
|
|
}
|
|
|
|
/**
|
|
* Returns the set of GeomRendering bits that represent the rendering
|
|
* properties required to properly render this primitive.
|
|
*/
|
|
int GeomLinesAdjacency::
|
|
get_geom_rendering() const {
|
|
return GeomPrimitive::get_geom_rendering() | GR_adjacency;
|
|
}
|
|
|
|
/**
|
|
* If the primitive type is a simple type in which all primitives have the
|
|
* same number of vertices, like lines, returns the number of vertices per
|
|
* primitive. If the primitive type is a more complex type in which different
|
|
* primitives might have different numbers of vertices, for instance a line
|
|
* strip, returns 0.
|
|
*/
|
|
int GeomLinesAdjacency::
|
|
get_num_vertices_per_primitive() const {
|
|
return 4;
|
|
}
|
|
|
|
/**
|
|
* Returns the minimum number of vertices that must be added before
|
|
* close_primitive() may legally be called.
|
|
*/
|
|
int GeomLinesAdjacency::
|
|
get_min_num_vertices_per_primitive() const {
|
|
return 4;
|
|
}
|
|
|
|
/**
|
|
* Calls the appropriate method on the GSG to draw the primitive.
|
|
*/
|
|
bool GeomLinesAdjacency::
|
|
draw(GraphicsStateGuardianBase *gsg, const GeomPrimitivePipelineReader *reader,
|
|
bool force) const {
|
|
return gsg->draw_lines_adj(reader, force);
|
|
}
|
|
|
|
/**
|
|
* Tells the BamReader how to create objects of type Geom.
|
|
*/
|
|
void GeomLinesAdjacency::
|
|
register_with_read_factory() {
|
|
BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
|
|
}
|
|
|
|
/**
|
|
* This function is called by the BamReader's factory when a new object of
|
|
* type Geom is encountered in the Bam file. It should create the Geom and
|
|
* extract its information from the file.
|
|
*/
|
|
TypedWritable *GeomLinesAdjacency::
|
|
make_from_bam(const FactoryParams ¶ms) {
|
|
GeomLinesAdjacency *object = new GeomLinesAdjacency(UH_unspecified);
|
|
DatagramIterator scan;
|
|
BamReader *manager;
|
|
|
|
parse_params(params, scan, manager);
|
|
object->fillin(scan, manager);
|
|
|
|
return object;
|
|
}
|