![Confused :?](./images/smilies/icon_confused.gif)
(ie: skybox, to solid, to transparent, etc.)
Doesn't seem like it's cleared after the skybox render pass.
I am not sure that the skybox is rendered with zWrite disabled.Sudi wrote:no the zBuffer is not cleared after each renderpass. Wouldn't make sense to clear the buffer after the solid pass and then render transparent stuff. it would be rendered ontop of everything(seeing stuff through walls). The skybox is rendered with zWrite disabled.
Code: Select all
class CCustomPassNode : public scene::ISceneNode {
irr::scene::IAnimatedMesh *mesh;
E_SCENE_NODE_RENDER_PASS renderPass;
public:
CCustomPassNode(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, IAnimatedMesh *m, E_SCENE_NODE_RENDER_PASS pass)
: scene::ISceneNode(parent, mgr, id), mesh(m), renderPass(pass) {
}
virtual void OnRegisterSceneNode() {
if (IsVisible) SceneManager->registerNodeForRendering (this, renderPass);
ISceneNode::OnRegisterSceneNode();
}
virtual void render() {
video::IVideoDriver* driver = SceneManager->getVideoDriver();
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
// Render original meshes.
u32 meshBufferCount = mesh->getMeshBufferCount();
for (u32 i=0; i < meshBufferCount; ++i) {
scene::IMeshBuffer* mb = mesh->getMeshBuffer(i);
if (mb)
{
const video::SMaterial& material = mb->getMaterial();
video::IMaterialRenderer* rnd = driver->getMaterialRenderer(material.MaterialType);
driver->setMaterial(material);
driver->drawMeshBuffer(mb);
}
}
}
virtual const core::aabbox3d<f32>& getBoundingBox() const {
return mesh->getBoundingBox();
}
virtual u32 getMaterialCount() const {
return mesh->getMeshBufferCount();
}
virtual video::SMaterial& getMaterial(u32 i) {
return mesh->getMesh(0)->getMeshBuffer(i)->getMaterial();
}
};
....
void * DLL_EXPORT IrrAddCustomPassMeshToScene (IAnimatedMesh* mesh, u32 passEnum, s32 id = 0) {
return (new CCustomPassNode(smgr->getRootSceneNode(), smgr, id, mesh, (irr::scene::E_SCENE_NODE_RENDER_PASS)passEnum));
}
void DLL_EXPORT IrrRemoveCustomPassMeshFromScene (u32* node) {
((CCustomPassNode*)node)->drop();
}