Non-invocable member 'ShadowCameraSetupPtr'

Problems building or running the engine, queries about how to use features etc.
Post Reply
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

Ogre Version: :1.13.0.0:
Operating System: :Windows 64:
Render System: :DirectX 11:

Hi guys,

I'm starting to use Ogre 1.13.0.0 with c#. I downloaded the code, compiled following the tips of https://hellholegames.wordpress.com/blog/ and opened the sample project.

I'm trying to put shadow but the compiler doesn't let you run the line: scnMgr.setShadowCameraSetup(org.ogre.ShadowCameraSetupPtr(pssmSetup));

Another thing, the only floor and simbad project when terminating generates "System.AccessViolationException" error in "MeshPtr.Dispose". Is there something wrong with the swig project?

follows the whole code

Code: Select all

using org.ogre;

public class KeyListener : InputListener
{
    ApplicationContext ctx;

    public KeyListener(ApplicationContext ctx)
    {
        this.ctx = ctx;
    }

    public override bool keyPressed(KeyboardEvent evt)
    {
        if (evt.keysym.sym == 27)
            ctx.getRoot().queueEndRendering();
        return true;
    }
}

public class Example : ApplicationContext
{
    InputListener listener;

    public Example()
    {
        listener = new KeyListener(this);
    }

    public override void setup()
    {
        base.setup();
        addInputListener(listener);

        var root = getRoot();
        var scnMgr = root.createSceneManager();

        var shadergen = ShaderGenerator.getSingleton();
        shadergen.addSceneManager(scnMgr); // must be done before we do anything with the scene

        scnMgr.setAmbientLight(new ColourValue(.1f, .1f, .1f));

        var light = scnMgr.createLight("MainLight");
        var lightnode = scnMgr.getRootSceneNode().createChildSceneNode();
        lightnode.setPosition(0f, 10f, 15f);
        lightnode.attachObject(light);

        var cam = scnMgr.createCamera("myCam");
        cam.setAutoAspectRatio(true);
        cam.setNearClipDistance(0.5f);
        var camnode = scnMgr.getRootSceneNode().createChildSceneNode();
        camnode.attachObject(cam);

        var camman = new CameraMan(camnode);
        camman.setStyle(CameraStyle.CS_ORBIT);
        camman.setYawPitchDist(new Radian(0), new Radian(0.3f), 15f);
        addInputListener(camman);

        var vp = getRenderWindow().addViewport(cam);
        vp.setBackgroundColour(new ColourValue(.3f, .3f, .3f));

        //----------------------------

        //scnMgr.setShadowTechnique(org.ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE);
        scnMgr.setShadowTechnique(org.ogre.ShadowTechnique.SHADOWTYPE_TEXTURE_ADDITIVE_INTEGRATED);

        scnMgr.setShadowTextureCountPerLightType(Light.LightTypes.LT_DIRECTIONAL, 3);
        scnMgr.setShadowTextureCount(3);
        scnMgr.setShadowTextureSettings(1024, 3, PixelFormat.PF_FLOAT32_R);
        scnMgr.setShadowTextureCasterMaterial(MaterialManager.getSingleton().getByName("PSSM/shadow_caster"));

        PSSMShadowCameraSetup pssmSetup = new PSSMShadowCameraSetup();
        pssmSetup.setSplitPadding(1);
        pssmSetup.calculateSplitPoints(3, 0.01f, 500);

        pssmSetup.setOptimalAdjustFactor(0, 2);
        pssmSetup.setOptimalAdjustFactor(1, 1);
        pssmSetup.setOptimalAdjustFactor(2, 0.5f);
        scnMgr.setShadowCameraSetup(org.ogre.ShadowCameraSetupPtr(pssmSetup));

        scnMgr.setShadowFarDistance(500);
        scnMgr.setShadowCasterRenderBackFaces(false);
        scnMgr.setShadowTextureSelfShadow(true);

        //---------------------------------
        var ent = scnMgr.createEntity("Sinbad.mesh");
        ent.setCastShadows(true);
        var node = scnMgr.getRootSceneNode().createChildSceneNode();
        node.attachObject(ent);
        node.setPosition(0, 0, 0);

        //---------------------------------
        Plane plane = new Plane(new Vector3(0, 1, 0), 0);
        MeshManager.getSingleton().createPlane("ground", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, plane, 15, 15, 20, 20, true, 1, 2, 2, new Vector3(0, 0, 1));
        Entity entPlano = scnMgr.createEntity("chao", "ground");
        SceneNode nodePlano = scnMgr.getRootSceneNode().createChildSceneNode("chaoNode");
        entPlano.setMaterialName("Examples/Rockwall");
        nodePlano.attachObject(entPlano);
        nodePlano.setPosition(0,-5,0);
        //---------------------------------

    }

    static void Main()
    {
        var app = new Example();
        app.initApp();
        app.getRoot().startRendering();
        app.closeApp();
    }
}
thanks a lot
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

Hi,

I try this. I changed OgreMain source:

Code: Select all

OgreSceneManager.cpp
void SceneManager::setShadowCameraSetup(const ShadowCameraSetupPtr& shadowSetup)
{
    mShadowRenderer.mDefaultShadowCameraSetup = shadowSetup;
}
void SceneManager::setShadowCameraSetup(ShadowCameraSetup* shadowSetup)
{
    mShadowRenderer.mDefaultShadowCameraSetup = ShadowCameraSetupPtr(shadowSetup);
}
after all, swig implement this:

Code: Select all

  public void setShadowCameraSetup(ShadowCameraSetup shadowSetup) {
    OgrePINVOKE.SceneManager_setShadowCameraSetup__SWIG_1(swigCPtr, ShadowCameraSetup.getCPtr(shadowSetup));
    if (OgrePINVOKE.SWIGPendingException.Pending) throw OgrePINVOKE.SWIGPendingException.Retrieve();
  }
of course, my code looked like this:

Code: Select all

 scnMgr.setShadowCameraSetup(pssmSetup);
VS build and show, but with no shadows :shock:

Now I don't know where I went wrong!
Image
paroj
OGRE Team Member
OGRE Team Member
Posts: 1995
Joined: Sun Mar 30, 2014 2:51 pm
x 1075
Contact:

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by paroj »

the changes you made allows the csharp code to be compiled, but they do not prevent the shadow camera setup from being garbage collected. One must use ShadowCameraSetupPtr here.
Use PSSMShadowCameraSetup.create() instead.

also note that the MSVC SDK comes with pre-build csharp bindings in lib/cli/
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

I downloaded the Ogre source code and compiled it here, with CMAKE and then MSVS. I'm not using the Ogre SDK.

I just created a DLL in C# and copied the files from the C:\ogre3d\ogre-13.0.0\build-13.0.0 x64\csharp folder there. I created a new windows forms project using this dll as a reference.

Is this the right way? C# does not directly reference .lib files. Or is the correct way to create a C++ CLR Wrapper project?

Another thing. System.AccessViolationException error occurs in MeshPtr.cs, even without I initialize PSSMShadow, only with sinbad and plane in the scene.
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

Dear,

well, SWIG didn't recognize anything inside RT Shader.

Image
paroj
OGRE Team Member
OGRE Team Member
Posts: 1995
Joined: Sun Mar 30, 2014 2:51 pm
x 1075
Contact:

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by paroj »

looks like something went wrong when you were building things yourself. Please try following these instructions with the SDK first:
https://github.com/OGRECave/ogre/tree/m ... les/Csharp

then, when building yourself, building the INSTALL target should give you the same results like the downloaded SDK.
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

thanks in advance,

Well, with example.cs code exactly the same as what is in github it compiles and the executable runs.
but that also worked, as I did initially.

With pssmSetup, this code:

Code: Select all

using org.ogre;

public class KeyListener : InputListener
{
    ApplicationContext ctx;

    public KeyListener(ApplicationContext ctx)
    {
        this.ctx = ctx;
    }

    public override bool keyPressed(KeyboardEvent evt)
    {
        if (evt.keysym.sym == 27)
            ctx.getRoot().queueEndRendering();
        return true;
    }
}

public class Example : ApplicationContext
{
    InputListener listener;

    public Example()
    {
        listener = new KeyListener(this);
    }

    public override void setup()
    {
        base.setup();
        addInputListener(listener);

        var root = getRoot();
        var scnMgr = root.createSceneManager();

        var shadergen = ShaderGenerator.getSingleton();
        shadergen.addSceneManager(scnMgr); // must be done before we do anything with the scene

        scnMgr.setAmbientLight(new ColourValue(.1f, .1f, .1f));

        var light = scnMgr.createLight("MainLight");
        var lightnode = scnMgr.getRootSceneNode().createChildSceneNode();
        lightnode.setPosition(0f, 10f, 15f);
        lightnode.attachObject(light);

        var cam = scnMgr.createCamera("myCam");
        cam.setAutoAspectRatio(true);
        cam.setNearClipDistance(5);
        var camnode = scnMgr.getRootSceneNode().createChildSceneNode();
        camnode.attachObject(cam);

        var camman = new CameraMan(camnode);
        camman.setStyle(CameraStyle.CS_ORBIT);
        camman.setYawPitchDist(new Radian(0), new Radian(0.3f), 15f);
        addInputListener(camman);

        var vp = getRenderWindow().addViewport(cam);
        vp.setBackgroundColour(new ColourValue(.3f, .3f, .3f));

        //---------------------------------
        scnMgr.setShadowTechnique(org.ogre.ShadowTechnique.SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED);
        scnMgr.setShadowTextureCountPerLightType(Light.LightTypes.LT_DIRECTIONAL, 3);
        scnMgr.setShadowTextureCount(3);
        scnMgr.setShadowTextureSettings(1024, 3, PixelFormat.PF_FLOAT32_R);
        scnMgr.setShadowTextureCasterMaterial(MaterialManager.getSingleton().getByName("PSSM/shadow_caster"));

        PSSMShadowCameraSetup pssmSetup = new PSSMShadowCameraSetup();
        pssmSetup.setSplitPadding(1);
        pssmSetup.calculateSplitPoints(3, 0.01f, 500);

        pssmSetup.setOptimalAdjustFactor(0, 2);
        pssmSetup.setOptimalAdjustFactor(1, 1);
        pssmSetup.setOptimalAdjustFactor(2, 0.5f);
        scnMgr.setShadowCameraSetup(ShadowCameraSetupPtr(pssmSetup));

        scnMgr.setShadowFarDistance(500);
        scnMgr.setShadowCasterRenderBackFaces(false);
        scnMgr.setShadowTextureSelfShadow(true);
        //---------------------------------

        var ent = scnMgr.createEntity("Sinbad.mesh");
        var node = scnMgr.getRootSceneNode().createChildSceneNode();
        node.attachObject(ent);
        
        //---------------------------------
        Plane plane = new Plane(new Vector3(0, 1, 0), 0);
        MeshManager.getSingleton().createPlane("ground", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, plane, 20, 20, 20, 20, true, 1, 2, 2, new Vector3(0, 0, 1));
        Entity entPlano = scnMgr.createEntity("chao", "ground");
        SceneNode nodePlano = scnMgr.getRootSceneNode().createChildSceneNode("chaoNode");
        entPlano.setMaterialName("Examples/Rockwall");
        nodePlano.attachObject(entPlano);
        nodePlano.setPosition(0, -5, 0);
        //---------------------------------

    }

    static void Main()
    {
        var app = new Example();
        app.initApp();
        app.getRoot().startRendering();
        app.closeApp();
    }
}
he returns

Code: Select all

C:\ogre3d\ogre-13.0.0\build-13.0.0 x64\csharp\Ogre>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CSC EXAMPLE.CS -R:OGRE.DLL
Microsoft (R) Visual C# Compiler version 4.8.4161.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

example.cs(75,37): error CS0118: 'org.ogre.ShadowCameraSetupPtr' é um 'tipo', mas é usado como 'variável'

C:\ogre3d\ogre-13.0.0\build-13.0.0 x64\csharp\Ogre>
Adding only one plan, this code:

Code: Select all

using org.ogre;

public class KeyListener : InputListener
{
    ApplicationContext ctx;

    public KeyListener(ApplicationContext ctx)
    {
        this.ctx = ctx;
    }

    public override bool keyPressed(KeyboardEvent evt)
    {
        if (evt.keysym.sym == 27)
            ctx.getRoot().queueEndRendering();
        return true;
    }
}

public class Example : ApplicationContext
{
    InputListener listener;

    public Example()
    {
        listener = new KeyListener(this);
    }

    public override void setup()
    {
        base.setup();
        addInputListener(listener);

        var root = getRoot();
        var scnMgr = root.createSceneManager();

        var shadergen = ShaderGenerator.getSingleton();
        shadergen.addSceneManager(scnMgr); // must be done before we do anything with the scene

        scnMgr.setAmbientLight(new ColourValue(.1f, .1f, .1f));

        var light = scnMgr.createLight("MainLight");
        var lightnode = scnMgr.getRootSceneNode().createChildSceneNode();
        lightnode.setPosition(0f, 10f, 15f);
        lightnode.attachObject(light);

        var cam = scnMgr.createCamera("myCam");
        cam.setAutoAspectRatio(true);
        cam.setNearClipDistance(5);
        var camnode = scnMgr.getRootSceneNode().createChildSceneNode();
        camnode.attachObject(cam);

        var camman = new CameraMan(camnode);
        camman.setStyle(CameraStyle.CS_ORBIT);
        camman.setYawPitchDist(new Radian(0), new Radian(0.3f), 15f);
        addInputListener(camman);

        var vp = getRenderWindow().addViewport(cam);
        vp.setBackgroundColour(new ColourValue(.3f, .3f, .3f));

        //---------------------------------
        
        //---------------------------------

        var ent = scnMgr.createEntity("Sinbad.mesh");
        var node = scnMgr.getRootSceneNode().createChildSceneNode();
        node.attachObject(ent);
        
        //---------------------------------
        Plane plane = new Plane(new Vector3(0, 1, 0), 0);
        MeshManager.getSingleton().createPlane("ground", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, plane, 20, 20, 20, 20, true, 1, 2, 2, new Vector3(0, 0, 1));
        Entity entPlano = scnMgr.createEntity("chao", "ground");
        SceneNode nodePlano = scnMgr.getRootSceneNode().createChildSceneNode("chaoNode");
        entPlano.setMaterialName("Examples/Rockwall");
        nodePlano.attachObject(entPlano);
        nodePlano.setPosition(0, -5, 0);
        //---------------------------------

    }

    static void Main()
    {
        var app = new Example();
        app.initApp();
        app.getRoot().startRendering();
        app.closeApp();
    }
}
he runs, but after i close window, on de prompt they show

Code: Select all

Plugin successfully uninstalled
Unloading library C:/ogre3d/ogre-13.0.0/build-13.0.0 x64/csharp/Ogre/.\RenderSystem_Direct3D11
Unregistering ResourceManager for type Skeleton
Unregistering ResourceManager for type Mesh
Unregistering ResourceManager for type Material

Exceção Sem Tratamento: System.AccessViolationException: Tentativa de leitura ou gravação em memória protegida. Normalmente, isso é uma indicação de que outra memória está danificada.
   em org.ogre.OgrePINVOKE.delete_MeshPtr(HandleRef jarg1)
   em org.ogre.MeshPtr.Dispose(Boolean disposing)
   em org.ogre.MeshPtr.Finalize()

C:\ogre3d\ogre-13.0.0\build-13.0.0 x64\csharp\Ogre>
Then the System.AccessViolationException: remains

I tried to put the RTShadow code but it didn't compile too. I downloaded the SDK and copied the DLLs to a new project and also had the same problems.

I think details are left behind in the SWING project... Or is someone using C# and did it work?

:shock:
paroj
OGRE Team Member
OGRE Team Member
Posts: 1995
Joined: Sun Mar 30, 2014 2:51 pm
x 1075
Contact:

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by paroj »

Code: Select all

using org.ogre;

public class KeyListener : InputListener
{
    ApplicationContext ctx;

    public KeyListener(ApplicationContext ctx)
    {
        this.ctx = ctx;
    }

    public override bool keyPressed(KeyboardEvent evt)
    {
        if (evt.keysym.sym == 27)
            ctx.getRoot().queueEndRendering();
        return true;
    }
}

public class Example : ApplicationContext
{
    InputListener listener;

    public Example()
    {
        listener = new KeyListener(this);
    }

    public override void setup()
    {
        base.setup();
        addInputListener(listener);

        var root = getRoot();
        var scnMgr = root.createSceneManager();

        var shadergen = ShaderGenerator.getSingleton();
        shadergen.addSceneManager(scnMgr); // must be done before we do anything with the scene

        scnMgr.setAmbientLight(new ColourValue(.1f, .1f, .1f));

        var light = scnMgr.createLight("MainLight");
        var lightnode = scnMgr.getRootSceneNode().createChildSceneNode();
        lightnode.setPosition(0f, 10f, 15f);
        lightnode.attachObject(light);

        var cam = scnMgr.createCamera("myCam");
        cam.setAutoAspectRatio(true);
        cam.setNearClipDistance(5);
        var camnode = scnMgr.getRootSceneNode().createChildSceneNode();
        camnode.attachObject(cam);

        var camman = new CameraMan(camnode);
        camman.setStyle(CameraStyle.CS_ORBIT);
        camman.setYawPitchDist(new Radian(0), new Radian(0.3f), 15f);
        addInputListener(camman);

        var vp = getRenderWindow().addViewport(cam);
        vp.setBackgroundColour(new ColourValue(.3f, .3f, .3f));

        //---------------------------------
        scnMgr.setShadowTechnique(org.ogre.ShadowTechnique.SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED);
        scnMgr.setShadowTextureCountPerLightType(Light.LightTypes.LT_DIRECTIONAL, 3);
        scnMgr.setShadowTextureCount(3);
        scnMgr.setShadowTextureSettings(1024, 3, PixelFormat.PF_FLOAT32_R);
        var mat = MaterialManager.getSingleton().getByName("PSSM/shadow_caster");
        System.GC.SuppressFinalize(mat);
        scnMgr.setShadowTextureCasterMaterial(mat);

        var pssmSetup = PSSMShadowCameraSetup.create();
        scnMgr.setShadowCameraSetup(pssmSetup);

        scnMgr.setShadowFarDistance(500);
        scnMgr.setShadowCasterRenderBackFaces(false);
        scnMgr.setShadowTextureSelfShadow(true);
        //---------------------------------

        var ent = scnMgr.createEntity("Sinbad.mesh");
        var node = scnMgr.getRootSceneNode().createChildSceneNode();
        node.attachObject(ent);

        //---------------------------------
        Plane plane = new Plane(new Vector3(0, 1, 0), 0);
        System.GC.SuppressFinalize(MeshManager.getSingleton().createPlane("ground", Ogre.RGN_DEFAULT, plane, 20, 20, 20, 20, true, 1, 2, 2, new Vector3(0, 0, 1)));
        Entity entPlano = scnMgr.createEntity("chao", "ground");
        SceneNode nodePlano = scnMgr.getRootSceneNode().createChildSceneNode("chaoNode");
        entPlano.setMaterialName("Examples/Rockwall");
        nodePlano.attachObject(entPlano);
        nodePlano.setPosition(0, -5, 0);
        //---------------------------------

    }

    static void Main()
    {
        var app = new Example();
        app.initApp();
        app.getRoot().startRendering();
        app.closeApp();
    }
}
this way I can get your code to run and shutdown cleanly.

There seems to be an issue with C# keeping ResourcePtrs for too long and freeing them only after ApplicationContext is destroyed. Unfortunately I have no time to investigate this and just call SuppressFinalize on them.
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

very good!

there is no more error message at the end. OK.

but the code doesn't generate shadow, what's missing?
paroj
OGRE Team Member
OGRE Team Member
Posts: 1995
Joined: Sun Mar 30, 2014 2:51 pm
x 1075
Contact:

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by paroj »

Code: Select all

using org.ogre;

public class KeyListener : InputListener
{
    ApplicationContext ctx;

    public KeyListener(ApplicationContext ctx)
    {
        this.ctx = ctx;
    }

    public override bool keyPressed(KeyboardEvent evt)
    {
        if (evt.keysym.sym == 27)
            ctx.getRoot().queueEndRendering();
        return true;
    }
}

public class Example : ApplicationContext
{
    InputListener listener;

    public Example()
    {
        listener = new KeyListener(this);
    }

    public override void setup()
    {
        base.setup();
        addInputListener(listener);

        var root = getRoot();
        var scnMgr = root.createSceneManager();

        var shadergen = ShaderGenerator.getSingleton();
        shadergen.addSceneManager(scnMgr); // must be done before we do anything with the scene

        scnMgr.setAmbientLight(new ColourValue(.1f, .1f, .1f));

        var light = scnMgr.createLight("MainLight");
        var lightnode = scnMgr.getRootSceneNode().createChildSceneNode();
        lightnode.setPosition(0f, 30f, 45f);
        lightnode.attachObject(light);

        var cam = scnMgr.createCamera("myCam");
        cam.setAutoAspectRatio(true);
        cam.setNearClipDistance(5);
        var camnode = scnMgr.getRootSceneNode().createChildSceneNode();
        camnode.attachObject(cam);

        var camman = new CameraMan(camnode);
        camman.setStyle(CameraStyle.CS_ORBIT);
        camman.setYawPitchDist(new Radian(0), new Radian(0.3f), 15f);
        addInputListener(camman);

        var vp = getRenderWindow().addViewport(cam);
        vp.setBackgroundColour(new ColourValue(.3f, .3f, .3f));

        //---------------------------------
        scnMgr.setShadowTechnique(org.ogre.ShadowTechnique.SHADOWTYPE_TEXTURE_MODULATIVE);
        scnMgr.setShadowTextureSettings(1024, 1, PixelFormat.PF_L8);
        scnMgr.setShadowDirLightTextureOffset(0);
        //---------------------------------

        var ent = scnMgr.createEntity("Sinbad.mesh");
        var node = scnMgr.getRootSceneNode().createChildSceneNode();
        node.attachObject(ent);

        //---------------------------------
        Plane plane = new Plane(new Vector3(0, 1, 0), 0);
        System.GC.SuppressFinalize(MeshManager.getSingleton().createPlane("ground", Ogre.RGN_DEFAULT, plane, 20, 20, 20, 20, true, 1, 2, 2, new Vector3(0, 0, 1)));
        Entity entPlano = scnMgr.createEntity("chao", "ground");
        SceneNode nodePlano = scnMgr.getRootSceneNode().createChildSceneNode("chaoNode");
        entPlano.setCastShadows(false);
        entPlano.setMaterialName("Examples/Rockwall");
        nodePlano.attachObject(entPlano);
        nodePlano.setPosition(0, -5, 0);
        //---------------------------------

    }

    static void Main()
    {
        var app = new Example();
        app.initApp();
        app.getRoot().startRendering();
        app.closeApp();
    }
}
guilherme
Gnoblar
Posts: 9
Joined: Fri Aug 20, 2021 2:00 pm

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by guilherme »

Thanks paroj,

This Works.
Image

I have a big project to migrate from MOgre but staying in C# with WPF. I'm still studying how to do it.

I must conclude that Ogre's SWIG project is not yet complete. It will be necessary to work around problems. Ok.

Thank you very much!
paroj
OGRE Team Member
OGRE Team Member
Posts: 1995
Joined: Sun Mar 30, 2014 2:51 pm
x 1075
Contact:

Re: Non-invocable member 'ShadowCameraSetupPtr'

Post by paroj »

guilherme wrote: Wed Sep 01, 2021 3:40 pm I must conclude that Ogre's SWIG project is not yet complete. It will be necessary to work around problems. Ok.
yes, thats why it is marked "beta". I dont have any C# projects myself, so the C# component is driven by community contributions.
The SWIG project itself should mostly work though. That part is shared with the Java and Python bindings and especially the latter are fairly complete.

Also, some users already put Ogre-C# in production and contribute missing bits occasionally - there is just no straightforward path from MOgre users.
Post Reply