mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
further improvements from Erik Pojar
This commit is contained in:
parent
dde2109d07
commit
05dbe116e4
@ -24,6 +24,8 @@
|
|||||||
#include "colorAttrib.h"
|
#include "colorAttrib.h"
|
||||||
#include "textureAttrib.h"
|
#include "textureAttrib.h"
|
||||||
#include "cullFaceAttrib.h"
|
#include "cullFaceAttrib.h"
|
||||||
|
#include "transparencyAttrib.h"
|
||||||
|
#include "depthWriteAttrib.h"
|
||||||
#include "lodNode.h"
|
#include "lodNode.h"
|
||||||
#include "switchNode.h"
|
#include "switchNode.h"
|
||||||
#include "sequenceNode.h"
|
#include "sequenceNode.h"
|
||||||
@ -32,6 +34,7 @@
|
|||||||
#include "collisionPlane.h"
|
#include "collisionPlane.h"
|
||||||
#include "collisionSphere.h"
|
#include "collisionSphere.h"
|
||||||
#include "collisionInvSphere.h"
|
#include "collisionInvSphere.h"
|
||||||
|
#include "textureStage.h"
|
||||||
#include "geomNode.h"
|
#include "geomNode.h"
|
||||||
#include "geom.h"
|
#include "geom.h"
|
||||||
#include "geomTriangles.h"
|
#include "geomTriangles.h"
|
||||||
@ -46,6 +49,7 @@
|
|||||||
#include "eggPolygon.h"
|
#include "eggPolygon.h"
|
||||||
#include "eggTexture.h"
|
#include "eggTexture.h"
|
||||||
#include "eggMaterial.h"
|
#include "eggMaterial.h"
|
||||||
|
#include "eggRenderMode.h"
|
||||||
#include "somethingToEggConverter.h"
|
#include "somethingToEggConverter.h"
|
||||||
#include "dcast.h"
|
#include "dcast.h"
|
||||||
#include "pystub.h"
|
#include "pystub.h"
|
||||||
@ -448,6 +452,39 @@ convert_triangles(const GeomVertexData *vertex_data,
|
|||||||
egg_tex = get_egg_texture(ta->get_texture());
|
egg_tex = get_egg_texture(ta->get_texture());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check the texture environment
|
||||||
|
if ((ta != (const TextureAttrib *)NULL) && (egg_tex != (const EggTexture *)NULL)) {
|
||||||
|
TextureStage* tex_stage = ta->get_on_stage(0);
|
||||||
|
if (tex_stage != (const TextureStage *)NULL) {
|
||||||
|
switch (tex_stage->get_mode()) {
|
||||||
|
case TextureStage::M_modulate:
|
||||||
|
if (has_color_off == true) {
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_replace);
|
||||||
|
} else {
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_modulate);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TextureStage::M_decal:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_decal);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_blend:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_blend);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_replace:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_replace);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_add:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_add);
|
||||||
|
break;
|
||||||
|
case TextureStage::M_blend_color_scale:
|
||||||
|
egg_tex->set_env_type(EggTexture::ET_blend_color_scale);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check the backface flag.
|
// Check the backface flag.
|
||||||
bool bface = false;
|
bool bface = false;
|
||||||
const RenderAttrib *cf_attrib = net_state->get_attrib(CullFaceAttrib::get_class_type());
|
const RenderAttrib *cf_attrib = net_state->get_attrib(CullFaceAttrib::get_class_type());
|
||||||
@ -458,6 +495,61 @@ convert_triangles(const GeomVertexData *vertex_data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check the depth write flag - only needed for AM_blend_no_occlude
|
||||||
|
bool has_depthwrite = false;
|
||||||
|
DepthWriteAttrib::Mode depthwrite = DepthWriteAttrib::M_on;
|
||||||
|
const RenderAttrib *dw_attrib = net_state->get_attrib(DepthWriteAttrib::get_class_type());
|
||||||
|
if (dw_attrib != (const RenderAttrib *)NULL) {
|
||||||
|
const DepthWriteAttrib *dwa = DCAST(DepthWriteAttrib, dw_attrib);
|
||||||
|
depthwrite = dwa->get_mode();
|
||||||
|
has_depthwrite = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the transparency flag.
|
||||||
|
bool has_transparency = false;
|
||||||
|
TransparencyAttrib::Mode transparency = TransparencyAttrib::M_none;
|
||||||
|
const RenderAttrib *tr_attrib = net_state->get_attrib(TransparencyAttrib::get_class_type());
|
||||||
|
if (tr_attrib != (const RenderAttrib *)NULL) {
|
||||||
|
const TransparencyAttrib *tra = DCAST(TransparencyAttrib, tr_attrib);
|
||||||
|
transparency = tra->get_mode();
|
||||||
|
has_transparency = true;
|
||||||
|
}
|
||||||
|
if (has_transparency && (egg_tex != (EggTexture *)NULL)) {
|
||||||
|
EggRenderMode::AlphaMode tex_trans = EggRenderMode::AM_unspecified;
|
||||||
|
switch (transparency) {
|
||||||
|
case TransparencyAttrib::M_none:
|
||||||
|
tex_trans = EggRenderMode::AM_off;
|
||||||
|
break;
|
||||||
|
case TransparencyAttrib::M_alpha:
|
||||||
|
if (has_depthwrite && (depthwrite == DepthWriteAttrib::M_off)) {
|
||||||
|
tex_trans = EggRenderMode::AM_blend_no_occlude;
|
||||||
|
has_depthwrite = false;
|
||||||
|
} else {
|
||||||
|
tex_trans = EggRenderMode::AM_blend;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TransparencyAttrib::M_multisample:
|
||||||
|
tex_trans = EggRenderMode::AM_ms;
|
||||||
|
break;
|
||||||
|
case TransparencyAttrib::M_multisample_mask:
|
||||||
|
tex_trans = EggRenderMode::AM_ms_mask;
|
||||||
|
break;
|
||||||
|
case TransparencyAttrib::M_binary:
|
||||||
|
tex_trans = EggRenderMode::AM_binary;
|
||||||
|
break;
|
||||||
|
case TransparencyAttrib::M_dual:
|
||||||
|
tex_trans = EggRenderMode::AM_dual;
|
||||||
|
break;
|
||||||
|
default: // intentional fall-through
|
||||||
|
case TransparencyAttrib::M_notused:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (tex_trans != EggRenderMode::AM_unspecified) {
|
||||||
|
egg_tex->set_alpha_mode(tex_trans);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Normalf normal;
|
Normalf normal;
|
||||||
Colorf color;
|
Colorf color;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user