mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
Added support for glow maps.
This commit is contained in:
parent
66193a3f62
commit
c31a9d079c
@ -3335,6 +3335,7 @@ void DXGraphicsStateGuardian8::
|
||||
set_texture_blend_mode(int i, const TextureStage *stage) {
|
||||
switch (stage->get_mode()) {
|
||||
case TextureStage::M_modulate:
|
||||
case TextureStage::M_modulate_glow_map:
|
||||
// emulates GL_MODULATE glTexEnv mode
|
||||
_d3d_device->SetTextureStageState(i, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
||||
_d3d_device->SetTextureStageState(i, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||
|
@ -4617,6 +4617,7 @@ void DXGraphicsStateGuardian9::
|
||||
set_texture_blend_mode(int i, const TextureStage *stage) {
|
||||
switch (stage->get_mode()) {
|
||||
case TextureStage::M_modulate:
|
||||
case TextureStage::M_modulate_glow_map:
|
||||
// emulates GL_MODULATE glTexEnv mode
|
||||
set_texture_stage_state(i, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
||||
set_texture_stage_state(i, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||
|
@ -562,9 +562,10 @@ affects_polygon_alpha() const {
|
||||
case ET_add:
|
||||
case ET_blend_color_scale:
|
||||
return false;
|
||||
|
||||
case ET_modulate_glow_map:
|
||||
case ET_normal_map:
|
||||
case ET_gloss_map:
|
||||
case ET_glow_map:
|
||||
case ET_normal_gloss_map:
|
||||
return false;
|
||||
|
||||
@ -880,12 +881,18 @@ string_env_type(const string &string) {
|
||||
} else if (cmp_nocase_uh(string, "blend_color_scale") == 0) {
|
||||
return ET_blend_color_scale;
|
||||
|
||||
} else if (cmp_nocase_uh(string, "modulate_glow_map") == 0) {
|
||||
return ET_modulate_glow_map;
|
||||
|
||||
} else if (cmp_nocase_uh(string, "normal_map") == 0) {
|
||||
return ET_normal_map;
|
||||
|
||||
} else if (cmp_nocase_uh(string, "gloss_map") == 0) {
|
||||
return ET_gloss_map;
|
||||
|
||||
} else if (cmp_nocase_uh(string, "glow_map") == 0) {
|
||||
return ET_glow_map;
|
||||
|
||||
} else if (cmp_nocase_uh(string, "normal_gloss_map") == 0) {
|
||||
return ET_normal_gloss_map;
|
||||
|
||||
@ -1291,12 +1298,18 @@ ostream &operator << (ostream &out, EggTexture::EnvType type) {
|
||||
case EggTexture::ET_blend_color_scale:
|
||||
return out << "blend_color_scale";
|
||||
|
||||
case EggTexture::ET_modulate_glow_map:
|
||||
return out << "modulate_glow_map";
|
||||
|
||||
case EggTexture::ET_normal_map:
|
||||
return out << "normal_map";
|
||||
|
||||
case EggTexture::ET_gloss_map:
|
||||
return out << "gloss_map";
|
||||
|
||||
case EggTexture::ET_glow_map:
|
||||
return out << "glow_map";
|
||||
|
||||
case EggTexture::ET_normal_gloss_map:
|
||||
return out << "normal_gloss_map";
|
||||
|
||||
|
@ -102,8 +102,10 @@ PUBLISHED:
|
||||
ET_replace,
|
||||
ET_add,
|
||||
ET_blend_color_scale,
|
||||
ET_modulate_glow_map,
|
||||
ET_normal_map,
|
||||
ET_gloss_map,
|
||||
ET_glow_map,
|
||||
ET_normal_gloss_map,
|
||||
ET_selector_map,
|
||||
};
|
||||
|
@ -1379,6 +1379,10 @@ make_texture_stage(const EggTexture *egg_tex) {
|
||||
stage->set_mode(TextureStage::M_blend_color_scale);
|
||||
break;
|
||||
|
||||
case EggTexture::ET_modulate_glow_map:
|
||||
stage->set_mode(TextureStage::M_modulate_glow_map);
|
||||
break;
|
||||
|
||||
case EggTexture::ET_normal_map:
|
||||
stage->set_mode(TextureStage::M_normal_map);
|
||||
break;
|
||||
@ -1387,6 +1391,10 @@ make_texture_stage(const EggTexture *egg_tex) {
|
||||
stage->set_mode(TextureStage::M_gloss_map);
|
||||
break;
|
||||
|
||||
case EggTexture::ET_glow_map:
|
||||
stage->set_mode(TextureStage::M_glow_map);
|
||||
break;
|
||||
|
||||
case EggTexture::ET_normal_gloss_map:
|
||||
stage->set_mode(TextureStage::M_normal_gloss_map);
|
||||
break;
|
||||
|
@ -5290,6 +5290,7 @@ get_texture_apply_mode_type(TextureStage::Mode am) {
|
||||
case TextureStage::M_add: return GL_ADD;
|
||||
case TextureStage::M_combine: return GL_COMBINE;
|
||||
case TextureStage::M_blend_color_scale: return GL_BLEND;
|
||||
case TextureStage::M_modulate_glow_map: return GL_MODULATE;
|
||||
}
|
||||
|
||||
GLCAT.error()
|
||||
|
@ -397,12 +397,18 @@ operator << (ostream &out, TextureStage::Mode mode) {
|
||||
case TextureStage::M_blend_color_scale:
|
||||
return out << "blend_color_scale";
|
||||
|
||||
case TextureStage::M_modulate_glow_map:
|
||||
return out << "modulate_glow_map";
|
||||
|
||||
case TextureStage::M_normal_map:
|
||||
return out << "normal_map";
|
||||
|
||||
case TextureStage::M_gloss_map:
|
||||
return out << "gloss_map";
|
||||
|
||||
case TextureStage::M_glow_map:
|
||||
return out << "glow_map";
|
||||
|
||||
case TextureStage::M_normal_gloss_map:
|
||||
return out << "normal_gloss_map";
|
||||
|
||||
|
@ -57,11 +57,13 @@ PUBLISHED:
|
||||
M_add,
|
||||
M_combine,
|
||||
M_blend_color_scale,
|
||||
M_modulate_glow_map, // When fixed-function, equivalent to modulate.
|
||||
|
||||
// Modes that are only relevant to shader-based rendering.
|
||||
|
||||
M_normal_map,
|
||||
M_gloss_map,
|
||||
M_glow_map,
|
||||
M_normal_gloss_map,
|
||||
M_selector_map,
|
||||
};
|
||||
|
@ -178,6 +178,9 @@ collect_maps() {
|
||||
for (size_t i=0; i<_gloss_maps.size(); i++) {
|
||||
_all_maps.push_back(_gloss_maps[i]);
|
||||
}
|
||||
for (size_t i=0; i<_glow_maps.size(); i++) {
|
||||
_all_maps.push_back(_glow_maps[i]);
|
||||
}
|
||||
|
||||
for (size_t i=0; i<_color.size(); i++) {
|
||||
if (_color[i]->_has_texture) {
|
||||
@ -229,6 +232,10 @@ find_textures_modern(MObject shader) {
|
||||
if (_gloss_maps.size() == 0) {
|
||||
MayaShaderColorDef::find_textures_modern(n, _gloss_maps, shader_fn.findPlug("specularColorR"), true);
|
||||
}
|
||||
MayaShaderColorDef::find_textures_modern(n, _glow_maps, shader_fn.findPlug("incandescence"), true);
|
||||
if (_glow_maps.size() == 0) {
|
||||
MayaShaderColorDef::find_textures_modern(n, _glow_maps, shader_fn.findPlug("incandescenceR"), true);
|
||||
}
|
||||
|
||||
collect_maps();
|
||||
|
||||
@ -282,8 +289,11 @@ calculate_pairings() {
|
||||
}
|
||||
|
||||
for (size_t i=0; i<_color_maps.size(); i++) {
|
||||
for (size_t j=0; j<_trans_maps.size(); j++) {
|
||||
try_pair(_color_maps[i], _trans_maps[j], true);
|
||||
if ((_color_maps[i]->_blend_type == MayaShaderColorDef::BT_modulate)||
|
||||
(_color_maps[i]->_blend_type == MayaShaderColorDef::BT_unspecified)) {
|
||||
for (size_t j=0; j<_trans_maps.size(); j++) {
|
||||
try_pair(_color_maps[i], _trans_maps[j], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (size_t i=0; i<_normal_maps.size(); i++) {
|
||||
@ -291,30 +301,33 @@ calculate_pairings() {
|
||||
try_pair(_normal_maps[i], _gloss_maps[j], true);
|
||||
}
|
||||
}
|
||||
for (size_t i=0; i<_color_maps.size(); i++) {
|
||||
for (size_t j=0; j<_trans_maps.size(); j++) {
|
||||
try_pair(_color_maps[i], _trans_maps[j], false);
|
||||
if (_trans_maps.size() == 0) {
|
||||
for (size_t i=0; i<_color_maps.size(); i++) {
|
||||
for (size_t j=0; j<_glow_maps.size(); j++) {
|
||||
try_pair(_color_maps[i], _glow_maps[j], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i=0; i<_normal_maps.size(); i++) {
|
||||
for (size_t j=0; j<_gloss_maps.size(); j++) {
|
||||
try_pair(_normal_maps[i], _gloss_maps[j], false);
|
||||
}
|
||||
}
|
||||
for (size_t i=0; i<_normal_maps.size(); i++) {
|
||||
if (_normal_maps[i]->_opposite) {
|
||||
_normal_maps[i]->_blend_type = MayaShaderColorDef::BT_normal_gloss_map;
|
||||
} else {
|
||||
_normal_maps[i]->_blend_type = MayaShaderColorDef::BT_normal_map;
|
||||
}
|
||||
_normal_maps[i]->_blend_type = MayaShaderColorDef::BT_normal_map;
|
||||
}
|
||||
for (size_t i=0; i<_gloss_maps.size(); i++) {
|
||||
if (_gloss_maps[i]->_opposite) {
|
||||
_gloss_maps[i]->_blend_type = MayaShaderColorDef::BT_unspecified;
|
||||
_gloss_maps[i]->_opposite->_blend_type = MayaShaderColorDef::BT_normal_gloss_map;
|
||||
} else {
|
||||
_gloss_maps[i]->_blend_type = MayaShaderColorDef::BT_gloss_map;
|
||||
}
|
||||
}
|
||||
for (size_t i=0; i<_glow_maps.size(); i++) {
|
||||
if (_glow_maps[i]->_opposite) {
|
||||
_glow_maps[i]->_blend_type = MayaShaderColorDef::BT_unspecified;
|
||||
_glow_maps[i]->_opposite->_blend_type = MayaShaderColorDef::BT_modulate_glow_map;
|
||||
} else {
|
||||
_glow_maps[i]->_blend_type = MayaShaderColorDef::BT_glow_map;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -62,6 +62,7 @@ public: // relevant only to modern mode.
|
||||
MayaShaderColorList _trans_maps;
|
||||
MayaShaderColorList _normal_maps;
|
||||
MayaShaderColorList _gloss_maps;
|
||||
MayaShaderColorList _glow_maps;
|
||||
|
||||
void bind_uvsets(MayaFileToUVSetMap &map);
|
||||
|
||||
|
@ -624,7 +624,7 @@ find_textures_modern(const string &shadername, MayaShaderColorList &list, MPlug
|
||||
|
||||
MPlug inputsPlug = sourceFn.findPlug("inputs");
|
||||
size_t nlayers = inputsPlug.numElements();
|
||||
for (int layer=nlayers-1; layer >= 0; layer--) {
|
||||
for (int layer=0; layer<nlayers; layer++) {
|
||||
MPlug elt = inputsPlug.elementByPhysicalIndex(layer);
|
||||
MPlug color;
|
||||
MPlug blend;
|
||||
|
@ -60,8 +60,10 @@ public:
|
||||
BT_replace,
|
||||
BT_add,
|
||||
BT_blend_color_scale,
|
||||
BT_modulate_glow_map,
|
||||
BT_normal_map,
|
||||
BT_gloss_map,
|
||||
BT_glow_map,
|
||||
BT_normal_gloss_map,
|
||||
BT_selector_map,
|
||||
};
|
||||
|
@ -2803,12 +2803,18 @@ apply_texture_blendtype(EggTexture &tex, const MayaShaderColorDef &color_def) {
|
||||
case MayaShaderColorDef::BT_blend_color_scale:
|
||||
tex.set_env_type(EggTexture::ET_blend_color_scale);
|
||||
return;
|
||||
case MayaShaderColorDef::BT_modulate_glow_map:
|
||||
tex.set_env_type(EggTexture::ET_modulate_glow_map);
|
||||
return;
|
||||
case MayaShaderColorDef::BT_normal_map:
|
||||
tex.set_env_type(EggTexture::ET_normal_map);
|
||||
return;
|
||||
case MayaShaderColorDef::BT_gloss_map:
|
||||
tex.set_env_type(EggTexture::ET_gloss_map);
|
||||
return;
|
||||
case MayaShaderColorDef::BT_glow_map:
|
||||
tex.set_env_type(EggTexture::ET_glow_map);
|
||||
return;
|
||||
case MayaShaderColorDef::BT_normal_gloss_map:
|
||||
tex.set_env_type(EggTexture::ET_normal_gloss_map);
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user