forked from panda3d/panda3d
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmaterial.h
More file actions
137 lines (110 loc) · 3.74 KB
/
material.h
File metadata and controls
137 lines (110 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Filename: material.h
// Created by: mike (09Jan97)
//
////////////////////////////////////////////////////////////////////
//
// 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."
//
////////////////////////////////////////////////////////////////////
#ifndef MATERIAL_H
#define MATERIAL_H
#include "pandabase.h"
#include "typedWritableReferenceCount.h"
#include "namable.h"
#include "luse.h"
#include "numeric_types.h"
#include "config_gobj.h"
class FactoryParams;
////////////////////////////////////////////////////////////////////
// Class : Material
// Description : Defines the way an object appears in the presence of
// lighting. A material is only necessary if lighting
// is to be enabled; otherwise, the material isn't used.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDA_GOBJ Material : public TypedWritableReferenceCount, public Namable {
PUBLISHED:
INLINE explicit Material(const string &name = "");
INLINE Material(const Material ©);
void operator = (const Material ©);
INLINE ~Material();
INLINE static Material *get_default();
INLINE bool has_ambient() const;
INLINE const LColor &get_ambient() const;
void set_ambient(const LColor &color);
INLINE void clear_ambient();
INLINE bool has_diffuse() const;
INLINE const LColor &get_diffuse() const;
void set_diffuse(const LColor &color);
INLINE void clear_diffuse();
INLINE bool has_specular() const;
INLINE const LColor &get_specular() const;
void set_specular(const LColor &color);
INLINE void clear_specular();
INLINE bool has_emission() const;
INLINE const LColor &get_emission() const;
void set_emission(const LColor &color);
INLINE void clear_emission();
INLINE PN_stdfloat get_shininess() const;
INLINE void set_shininess(PN_stdfloat shininess);
INLINE bool get_local() const;
INLINE void set_local(bool local);
INLINE bool get_twoside() const;
INLINE void set_twoside(bool twoside);
INLINE bool operator == (const Material &other) const;
INLINE bool operator != (const Material &other) const;
INLINE bool operator < (const Material &other) const;
int compare_to(const Material &other) const;
void output(ostream &out) const;
void write(ostream &out, int indent) const;
INLINE bool is_attrib_locked() const;
INLINE void set_attrib_lock();
private:
LColor _ambient;
LColor _diffuse;
LColor _specular;
LColor _emission;
PN_stdfloat _shininess;
static PT(Material) _default;
enum Flags {
F_ambient = 0x001,
F_diffuse = 0x002,
F_specular = 0x004,
F_emission = 0x008,
F_local = 0x010,
F_twoside = 0x020,
F_attrib_lock = 0x040
};
int _flags;
public:
static void register_with_read_factory();
virtual void write_datagram(BamWriter *manager, Datagram &me);
protected:
static TypedWritable *make_Material(const FactoryParams ¶ms);
void fillin(DatagramIterator &scan, BamReader *manager);
public:
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
TypedWritableReferenceCount::init_type();
register_type(_type_handle, "Material",
TypedWritableReferenceCount::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;
};
INLINE ostream &operator << (ostream &out, const Material &m) {
m.output(out);
return out;
}
#include "material.I"
#endif