24 int ColorScaleAttrib::_attrib_slot;
31 ColorScaleAttrib(
bool off,
const LVecBase4 &scale) :
36 _has_scale = !_scale.almost_equal(LVecBase4(1.0f, 1.0f, 1.0f, 1.0f));
37 _has_rgb_scale = !LVecBase3(_scale[0], _scale[1], _scale[2]).almost_equal(LVecBase3(1.0f, 1.0f, 1.0f));
38 _has_alpha_scale = !IS_NEARLY_EQUAL(_scale[3], 1.0f);
48 if (_identity_attrib ==
nullptr) {
50 _identity_attrib = return_new(attrib);
53 return _identity_attrib;
61 make(
const LVecBase4 &scale) {
63 return return_new(attrib);
75 return return_new(attrib);
84 return return_new(
new ColorScaleAttrib(
false, LVecBase4(1.0f, 1.0f, 1.0f, 1.0f)));
92 set_scale(
const LVecBase4 &scale)
const {
94 attrib->_scale = scale;
95 attrib->quantize_scale();
96 attrib->_has_scale = !scale.almost_equal(LVecBase4(1.0f, 1.0f, 1.0f, 1.0f));
97 attrib->_has_rgb_scale = !LVecBase3(scale[0], scale[1], scale[2]).almost_equal(LVecBase3(1.0f, 1.0f, 1.0f));
98 attrib->_has_alpha_scale = !IS_NEARLY_EQUAL(scale[3], 1.0f);
99 return return_new(attrib);
131 void ColorScaleAttrib::
132 output(std::ostream &out)
const {
133 out << get_type() <<
":";
157 int ColorScaleAttrib::
165 return _scale.compare_to(ta->_scale);
174 size_t ColorScaleAttrib::
175 get_hash_impl()
const {
178 hash = _scale.add_hash(hash);
201 LVecBase4 new_scale(ta->_scale[0] * _scale[0],
202 ta->_scale[1] * _scale[1],
203 ta->_scale[2] * _scale[2],
204 ta->_scale[3] * _scale[3]);
207 return return_new(attrib);
223 LVecBase4 new_scale(_scale[0] == 0.0f ? 1.0f : ta->_scale[0] / _scale[0],
224 _scale[1] == 0.0f ? 1.0f : ta->_scale[1] / _scale[1],
225 _scale[2] == 0.0f ? 1.0f : ta->_scale[2] / _scale[2],
226 _scale[3] == 0.0f ? 1.0f : ta->_scale[3] / _scale[3]);
229 return return_new(attrib);
236 void ColorScaleAttrib::
238 _scale[0] = cfloor(_scale[0] * 1024.0f + 0.5f) / 1024.0f;
239 _scale[1] = cfloor(_scale[1] * 1024.0f + 0.5f) / 1024.0f;
240 _scale[2] = cfloor(_scale[2] * 1024.0f + 0.5f) / 1024.0f;
241 _scale[3] = cfloor(_scale[3] * 1024.0f + 0.5f) / 1024.0f;
264 _scale.write_datagram(dg);
279 attrib->fillin(scan, manager);
288 void ColorScaleAttrib::
290 RenderAttrib::fillin(scan, manager);
293 _scale.read_datagram(scan);
295 _has_scale = !_scale.almost_equal(LVecBase4(1.0f, 1.0f, 1.0f, 1.0f));
296 _has_rgb_scale = !LVecBase3(_scale[0], _scale[1], _scale[2]).almost_equal(LVecBase3(1.0f, 1.0f, 1.0f));
297 _has_alpha_scale = !IS_NEARLY_EQUAL(_scale[3], 1.0f);