| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- // Filename: renderModeAttrib.cxx
- // Created by: drose (14Mar02)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
- //
- // All use of this software is subject to the terms of the Panda 3d
- // Software license. You should have received a copy of this license
- // along with this source code; you will also find a current copy of
- // the license at http://www.panda3d.org/license.txt .
- //
- // To contact the maintainers of this program write to
- // [email protected] .
- //
- ////////////////////////////////////////////////////////////////////
- #include "renderModeAttrib.h"
- #include "graphicsStateGuardianBase.h"
- #include "dcast.h"
- #include "bamReader.h"
- #include "bamWriter.h"
- #include "datagram.h"
- #include "datagramIterator.h"
- TypeHandle RenderModeAttrib::_type_handle;
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::make
- // Access: Published, Static
- // Description: Constructs a new RenderModeAttrib object that specifies
- // whether to draw polygons in the normal, filled mode,
- // or wireframe mode, or in some other yet-to-be-defined
- // mode.
- //
- // The line_width is relevant only if mode is
- // M_wireframe, and specifies the thickness of the
- // lines, in pixels, to use for wireframe.
- ////////////////////////////////////////////////////////////////////
- CPT(RenderAttrib) RenderModeAttrib::
- make(RenderModeAttrib::Mode mode, float line_width) {
- if (mode != M_wireframe) {
- line_width = 0.0f;
- }
- RenderModeAttrib *attrib = new RenderModeAttrib(mode, line_width);
- return return_new(attrib);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::issue
- // Access: Public, Virtual
- // Description: Calls the appropriate method on the indicated GSG
- // to issue the graphics commands appropriate to the
- // given attribute. This is normally called
- // (indirectly) only from
- // GraphicsStateGuardian::set_state() or modify_state().
- ////////////////////////////////////////////////////////////////////
- void RenderModeAttrib::
- issue(GraphicsStateGuardianBase *gsg) const {
- gsg->issue_render_mode(this);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::output
- // Access: Public, Virtual
- // Description:
- ////////////////////////////////////////////////////////////////////
- void RenderModeAttrib::
- output(ostream &out) const {
- out << get_type() << ":";
- switch (get_mode()) {
- case M_filled:
- out << "filled";
- break;
- case M_wireframe:
- out << "wireframe(" << get_line_width() << ")";
- break;
- }
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::compare_to_impl
- // Access: Protected, Virtual
- // Description: Intended to be overridden by derived RenderModeAttrib
- // types to return a unique number indicating whether
- // this RenderModeAttrib is equivalent to the other one.
- //
- // This should return 0 if the two RenderModeAttrib objects
- // are equivalent, a number less than zero if this one
- // should be sorted before the other one, and a number
- // greater than zero otherwise.
- //
- // This will only be called with two RenderModeAttrib
- // objects whose get_type() functions return the same.
- ////////////////////////////////////////////////////////////////////
- int RenderModeAttrib::
- compare_to_impl(const RenderAttrib *other) const {
- const RenderModeAttrib *ta;
- DCAST_INTO_R(ta, other, 0);
- if (_mode != ta->_mode) {
- return (int)_mode - (int)ta->_mode;
- }
- if (_line_width != ta->_line_width) {
- return _line_width < ta->_line_width ? -1 : 1;
- }
- return 0;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::make_default_impl
- // Access: Protected, Virtual
- // Description: Intended to be overridden by derived RenderModeAttrib
- // types to specify what the default property for a
- // RenderModeAttrib of this type should be.
- //
- // This should return a newly-allocated RenderModeAttrib of
- // the same type that corresponds to whatever the
- // standard default for this kind of RenderModeAttrib is.
- ////////////////////////////////////////////////////////////////////
- RenderAttrib *RenderModeAttrib::
- make_default_impl() const {
- return new RenderModeAttrib(M_filled, 0.0f);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::register_with_read_factory
- // Access: Public, Static
- // Description: Tells the BamReader how to create objects of type
- // RenderModeAttrib.
- ////////////////////////////////////////////////////////////////////
- void RenderModeAttrib::
- register_with_read_factory() {
- BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::write_datagram
- // Access: Public, Virtual
- // Description: Writes the contents of this object to the datagram
- // for shipping out to a Bam file.
- ////////////////////////////////////////////////////////////////////
- void RenderModeAttrib::
- write_datagram(BamWriter *manager, Datagram &dg) {
- RenderAttrib::write_datagram(manager, dg);
- dg.add_int8(_mode);
- dg.add_float32(_line_width);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::make_from_bam
- // Access: Protected, Static
- // Description: This function is called by the BamReader's factory
- // when a new object of type RenderModeAttrib is encountered
- // in the Bam file. It should create the RenderModeAttrib
- // and extract its information from the file.
- ////////////////////////////////////////////////////////////////////
- TypedWritable *RenderModeAttrib::
- make_from_bam(const FactoryParams ¶ms) {
- RenderModeAttrib *attrib = new RenderModeAttrib(M_filled, 0.0f);
- DatagramIterator scan;
- BamReader *manager;
- parse_params(params, scan, manager);
- attrib->fillin(scan, manager);
- return attrib;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: RenderModeAttrib::fillin
- // Access: Protected
- // Description: This internal function is called by make_from_bam to
- // read in all of the relevant data from the BamFile for
- // the new RenderModeAttrib.
- ////////////////////////////////////////////////////////////////////
- void RenderModeAttrib::
- fillin(DatagramIterator &scan, BamReader *manager) {
- RenderAttrib::fillin(scan, manager);
- _mode = (Mode)scan.get_int8();
- _line_width = scan.get_float32();
- }
|