19 GeomMunger *DXGeomMunger9::_deleted_chain =
nullptr;
33 state->get_attrib(texture);
34 state->get_attrib(tex_gen);
44 state->get_attrib_def(shader_attrib);
47 shader_attrib->get_shader() ==
nullptr &&
48 state->get_attrib(color_attrib) &&
52 _color.set(1, 1, 1, 1);
58 if (state->get_attrib(color_scale_attrib) &&
60 _color.componentwise_mult(color_scale_attrib->
get_scale());
63 _should_munge_state =
true;
67 _filtered_texture =
nullptr;
68 _reffed_filtered_texture =
false;
69 if (texture !=
nullptr) {
71 if (_filtered_texture != texture) {
72 _filtered_texture->
ref();
73 _reffed_filtered_texture =
true;
78 _texture.add_callback(
this);
79 _tex_gen.add_callback(
this);
87 if (_reffed_filtered_texture) {
89 _reffed_filtered_texture =
false;
92 _texture.remove_callback(
this);
93 _tex_gen.remove_callback(
this);
105 if (_reffed_filtered_texture) {
107 _reffed_filtered_texture =
false;
118 if (dxgsg9_cat.is_debug()) {
121 <<
"preparing animation type " << animation <<
" for " << *orig
128 new_format->set_animation(animation);
135 if (vertex_type !=
nullptr) {
136 new_array_format->add_column
137 (InternalName::get_vertex(), 3, NT_float32,
139 new_format->remove_column(vertex_type->
get_name());
151 new_array_format->add_column
153 NT_float32, C_other);
159 new_array_format->add_column
160 (InternalName::get_transform_index(), 1,
161 NT_packed_dcba, C_index);
165 new_format->
remove_column(InternalName::get_transform_weight());
166 new_format->remove_column(InternalName::get_transform_index());
169 new_format->remove_column(InternalName::get_transform_blend());
172 if (normal_type !=
nullptr) {
173 new_array_format->add_column
174 (InternalName::get_normal(), 3, NT_float32, C_normal);
175 new_format->remove_column(normal_type->
get_name());
178 if (color_type !=
nullptr) {
179 new_array_format->add_column
180 (InternalName::get_color(), 1, NT_packed_dabc, C_color);
181 new_format->remove_column(color_type->
get_name());
190 if (_filtered_texture !=
nullptr) {
192 vector_int ff_tc_index(num_stages, 0);
198 int max_tc_index = -1;
199 for (si = 0; si < num_stages; ++si) {
201 nassertr(tc_index < num_stages, orig);
202 ff_tc_index[tc_index] = si;
203 max_tc_index = std::max(tc_index, max_tc_index);
209 for (tc_index = 0; tc_index <= max_tc_index; ++tc_index) {
210 si = ff_tc_index[tc_index];
216 if (texcoord_type !=
nullptr) {
217 new_array_format->add_column
222 new_array_format->add_column(name, 2, NT_float32, C_texcoord);
224 new_format->remove_column(name);
230 for (
size_t i = 0; i < new_format->get_num_arrays(); ++i) {
232 if (orig_a->count_unused_space() != 0) {
234 for (
int j = 0; j < orig_a->get_num_columns(); ++j) {
239 new_format->set_array(i, new_a);
244 new_format->insert_array(0, new_array_format);
246 return GeomVertexFormat::register_format(new_format);
264 if (vertex_type !=
nullptr) {
265 new_array_format->add_column
266 (InternalName::get_vertex(), 3, NT_float32,
268 new_format->remove_column(vertex_type->
get_name());
275 if (normal_type !=
nullptr) {
276 new_array_format->add_column
277 (InternalName::get_normal(), 3, NT_float32, C_normal);
281 if (color_type !=
nullptr) {
282 new_array_format->add_column
283 (InternalName::get_color(), 1, NT_packed_dabc, C_color);
284 new_format->remove_column(color_type->
get_name());
293 if (_filtered_texture !=
nullptr) {
295 vector_int ff_tc_index(num_stages, 0);
301 int max_tc_index = -1;
302 for (si = 0; si < num_stages; ++si) {
304 nassertr(tc_index < num_stages, orig);
305 ff_tc_index[tc_index] = si;
306 max_tc_index = std::max(tc_index, max_tc_index);
312 for (tc_index = 0; tc_index <= max_tc_index; ++tc_index) {
313 si = ff_tc_index[tc_index];
319 if (texcoord_type !=
nullptr) {
320 new_array_format->add_column
325 new_array_format->add_column(name, 2, NT_float32, C_texcoord);
327 new_format->remove_column(name);
333 for (
size_t i = 0; i < new_format->get_num_arrays(); ++i) {
335 if (orig_a->count_unused_space() != 0) {
337 for (
int j = 0; j < orig_a->get_num_columns(); ++j) {
342 new_format->set_array(i, new_a);
347 new_format->insert_array(0, new_array_format);
349 return GeomVertexFormat::register_format(new_format);
358 compare_to_impl(
const GeomMunger *other)
const {
360 if (_filtered_texture != om->_filtered_texture) {
361 return _filtered_texture < om->_filtered_texture ? -1 : 1;
363 if (_tex_gen.owner_before(om->_tex_gen)) {
366 if (om->_tex_gen.owner_before(_tex_gen)) {
370 return StandardMunger::compare_to_impl(other);
379 geom_compare_to_impl(
const GeomMunger *other)
const {
384 if (_filtered_texture != om->_filtered_texture) {
385 return _filtered_texture < om->_filtered_texture ? -1 : 1;
387 if (_tex_gen.owner_before(om->_tex_gen)) {
390 if (om->_tex_gen.owner_before(_tex_gen)) {
394 return StandardMunger::geom_compare_to_impl(other);