InstantRadiosity not working for Ogre::v1::Entity?

Discussion area about developing with Ogre-Next (2.1, 2.2 and beyond)


Lax
Orc Shaman
Posts: 701
Joined: Mon Aug 06, 2007 12:53 pm
Location: Saarland, Germany
x 73

InstantRadiosity not working for Ogre::v1::Entity?

Post by Lax »

Hi dark_sylinc,

I now test Instand Radiocity and have a first version implemented in my engine. But as soon as:

this->instantRadiosity->build();

is called. I get this crash for any Ogre::v1::Entity:

Code: Select all

OgreMain_d.dll!Ogre::v1::HardwareBuffer::isLocked() Zeile 345    C++
     OgreMain_d.dll!Ogre::v1::HardwareBuffer::isLocked() Zeile 345    C++
     OgreMain_d.dll!Ogre::v1::VertexData::unlockMultipleElements(Ogre::FastArray<Ogre::v1::VertexData::ReadRequests> & requests={...}) Zeile 732    C++
   OgreHlmsPbs_d.dll!Ogre::InstantRadiosity::downloadRenderOp(const Ogre::v1::RenderOperation & renderOp={...}) Zeile 996    C++
     OgreHlmsPbs_d.dll!Ogre::InstantRadiosity::testLightVsAllObjects(unsigned char lightType='\0', float lightRange=3.40282347e+38, Ogre::ObjectData objData={...}, unsigned __int64 numNodes=64, const Ogre::InstantRadiosity::AreaOfInterest & scalarAreaOfInterest={...}, unsigned __int64 rayStart=0, unsigned __int64 numRays=128) Zeile 1111    C++
     OgreHlmsPbs_d.dll!Ogre::InstantRadiosity::processLight(Ogre::Vector3 lightPos={...}, const Ogre::Quaternion & lightRot={...}, unsigned char lightType='\0', Ogre::Radian angle={...}, Ogre::Vector3 lightColour={...}, float lightRange=3.40282347e+38, float attenConst=0.500000000, float attenLinear=0.00000000, float attenQuad=0.00499999989, const Ogre::InstantRadiosity::AreaOfInterest & areaOfInterest={...}) Zeile 671    C++
     OgreHlmsPbs_d.dll!Ogre::InstantRadiosity::build() Zeile 1455    C++
     InstantRadiosityComponent_d.dll!NOWA::InstantRadiosityComponent::internalBuild() Zeile 904    C++

local variables:

NameWertTyp ▶this0x00000262f5b49a10 {mSceneManager=0x00000262ff0e5a80 {...} mHlmsManager=0x00000262c3a36b70 {mRegisteredHlms=...} ...}Ogre::InstantRadiosity * ▶isHalf0x000000fc3e91cb98 {false, false, true (204), true (204), true (204), true (204), true (204), true (204), ...}bool[9] ▶itorendstd::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<Ogre::v1::RenderOperation const ,Ogre::InstantRadiosity::MeshData>>>> ▶meshData{vertexData=0x00000262c8857520 {4.00017023} indexData=0x00000262f5b666e0 "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýýÝÝÝÝÝÝÝÝÚ\x4\x4\x3¨.'¦" ...}Ogre::InstantRadiosity::MeshData numVertexElements2const unsigned __int64 ▶readRequests{mData=0x0000026293f6fa90 {semantic=VES_POSITION (1) type=VET_FLOAT3 (2) data=0x0000000000000000 <NULL> ...} ...}Ogre::FastArray<Ogre::v1::VertexData::ReadRequests> ▶renderOp{meshIndex=9 vertexData=0x00000262ffcce070 {mMgr=0x00000262c4172060 {...} vertexDeclaration=0x00000262ffdba500 {...} ...} ...}const Ogre::v1::RenderOperation &

Crashing here:

Code: Select all

bool isLocked() const
{
    return mIsLocked || ( mUseShadowBuffer && mShadowBuffer->isLocked() );
}

-> mShadowBuffer is nullptr
-> And useShadowBuffer = true

I changed also:

Code: Select all

v1Mesh = Ogre::v1::MeshManager::getSingletonPtr()->load(tempMeshFile, Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, Ogre::v1::HardwareBuffer::HBU_STATIC, Ogre::v1::HardwareBuffer::HBU_STATIC, true, true);

to:

Code: Select all

v1Mesh = Ogre::v1::MeshManager::getSingletonPtr()->load(tempMeshFile, Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, 
				Ogre::v1::HardwareBuffer::HBU_STATIC_WRITE_ONLY, Ogre::v1::HardwareBuffer::HBU_STATIC_WRITE_ONLY, true, true);

But that did not fix anything.

Some of my entity meshes are created with this serializer:
[MeshSerializer_v2.1 R0 LEGACYV1]

Note: I have in my NOWA-Engine mixed stuff: Ogre::v1::Entity and Animation v1 because of more advanced skeleton and animation features, which i use for Ragdolling. Static meshes, I use as Ogre::Item.

No idea if it helps. But this is one of the meshes.

https://www.lukas-kalinowski.com/Homepa ... ainer.mesh

Best Regards
Lax

http://www.lukas-kalinowski.com/Homepage/?page_id=1631
Please support Second Earth Technic Base built of Lego bricks for Lego ideas: https://ideas.lego.com/projects/81b9bd1 ... b97b79be62

User avatar
dark_sylinc
OGRE Team Member
OGRE Team Member
Posts: 5551
Joined: Sat Jul 21, 2007 4:55 pm
Location: Buenos Aires, Argentina
x 1402

Re: InstantRadiosity not working for Ogre::v1::Entity?

Post by dark_sylinc »

-> mShadowBuffer is nullptr
-> And useShadowBuffer = true

It sounds more like "this" was nullptr?

It sounds like some memory corruption happened. Maybe the v1 mesh has less-tested features like not having an index buffer or using triangle strips instead of triangle lists (or the index buffer is 32 bit and the code crashes because of a simple bug). ASAN may have more info.