[SOLVED] Embedded rendering issue

Kerion

03-05-2007 21:23:12

I am starting work on the all important world editor for my game system, and I am running in to some issues embedding MOGRE via a custom control.

Basically I have a UserControl called OgreView. Right now it's an extremely simple control, but the meat is as such:


public void InitializeView() {
if (Singleton.HasRef<OgreManager> ()) {
Root root = Singleton.Ref<OgreManager> ().Root;
SceneManager mgr = Singleton.Ref<OgreManager> ().SceneManager;

NameValuePairList nvp = new NameValuePairList ();
nvp["parentWindowHandle"] = this.Handle.ToString ();
m_Window = root.CreateRenderWindow (GetOgreViewName (), (uint)this.ClientSize.Width, (uint)this.ClientSize.Height, false, nvp);

m_Camera = mgr.CreateCamera (GetOgreViewName () + "Camera");
m_Camera.AutoAspectRatio = true;
m_Window.AddViewport (m_Camera);

m_Camera.SetPosition (0.0f, 200.0f, -400.0f);

IncOgreViewCount ();
}
}


Pretty simple stuff. OGRE has been initialized elsewhere (the OgreManager singleton) like so:


public void Initialize() {
m_Root = new Root ("", "", "mango.log");

m_Root.LoadPlugin ("RenderSystem_Direct3D9");
m_Root.LoadPlugin ("RenderSystem_GL");
m_Root.LoadPlugin ("Plugin_ParticleFX");

RenderSystem rs = m_Root.GetRenderSystemByName ("Direct3D9 Rendering Subsystem");
m_Root.RenderSystem = rs;
rs.SetConfigOption ("Full Screen", "No");
rs.SetConfigOption ("Video Mode", "800 x 600 @ 32-bit colour");

m_SceneMgr = m_Root.CreateSceneManager (SceneType.ST_GENERIC);

m_Root.Initialise (false);
}


The OgreManager initialize is called first, then when my MainForm (which embeds an OgreView control) does it's load event, I call InitializeView() on the OgreView.

No errors are thrown, but when I call Root.RenderOneFrame on a timer, nothing renders. The control should, in theory, turn black as soon as RenderOneFrame is called, but it never renders. No errors are written to the OGRE log (or mango.log in this case).

The timer callback looks like:

private void timer1_Tick (object sender, EventArgs e) {
this.Invoke (
new MethodInvoker(delegate {
Singleton.Ref<OgreManager> ().Root.RenderOneFrame ();
})
);
}


Is there anything particular that I am missing?

Oh, also, on the Resize and Move events of the OgreView, I am calling RenderWindow.WindowMovedOrResized(), so I am handle those events correctly (as far as I know them).

Do I need to invalidate the control or something to force it to paint?

UPDATE:

Tried invalidating the control with


ogreView1.Invoke (
new MethodInvoker (delegate {
ogreView1.Invalidate ();
})
);


No dice.

Kerion

03-05-2007 21:28:54

OGRE log contents. They look clean to me, but maybe you guys will see something I am missing.


15:27:30: Creating resource group General
15:27:30: Creating resource group Internal
15:27:30: Creating resource group Autodetect
15:27:30: SceneManagerFactory for type 'DefaultSceneManager' registered.
15:27:30: Registering ResourceManager for type Material
15:27:30: Registering ResourceManager for type Mesh
15:27:30: Registering ResourceManager for type Skeleton
15:27:30: MovableObjectFactory for type 'ParticleSystem' registered.
15:27:30: OverlayElementFactory for type Panel registered.
15:27:30: OverlayElementFactory for type BorderPanel registered.
15:27:30: OverlayElementFactory for type TextArea registered.
15:27:30: Registering ResourceManager for type Font
15:27:30: ArchiveFactory for archive type FileSystem registered.
15:27:30: ArchiveFactory for archive type Zip registered.
15:27:30: FreeImage version: 3.9.2
15:27:30: This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net for details
15:27:30: Supported formats: bmp,ico,jpg,jif,jpeg,jpe,jng,koa,iff,lbm,mng,pbm,pbm,pcd,pcx,pgm,pgm,png,ppm,ppm,ras,tga,targa,tif,tiff,wap,wbmp,wbm,psd,cut,xbm,xpm,gif,hdr,g3,sgi
15:27:30: DDS codec registering
15:27:30: Registering ResourceManager for type HighLevelGpuProgram
15:27:30: Registering ResourceManager for type Compositor
15:27:30: MovableObjectFactory for type 'Entity' registered.
15:27:30: MovableObjectFactory for type 'Light' registered.
15:27:30: MovableObjectFactory for type 'BillboardSet' registered.
15:27:30: MovableObjectFactory for type 'ManualObject' registered.
15:27:30: MovableObjectFactory for type 'BillboardChain' registered.
15:27:30: MovableObjectFactory for type 'RibbonTrail' registered.
15:27:30: *-*-* OGRE Initialising
15:27:30: *-*-* Version 1.4.0 (Eihort)
15:27:30: Loading library RenderSystem_Direct3D9
15:27:30: Installing plugin: D3D9 RenderSystem
15:27:30: D3D9 : Direct3D9 Rendering Subsystem created.
15:27:30: D3D9: Driver Detection Starts
15:27:30: D3D9: Driver Detection Ends
15:27:30: Plugin successfully installed
15:27:30: Loading library RenderSystem_GL
15:27:30: Installing plugin: GL RenderSystem
15:27:30: OpenGL Rendering Subsystem created.
15:27:31: Plugin successfully installed
15:27:31: Loading library Plugin_ParticleFX
15:27:31: Installing plugin: ParticleFX
15:27:31: Particle Emitter Type 'Point' registered
15:27:31: Particle Emitter Type 'Box' registered
15:27:31: Particle Emitter Type 'Ellipsoid' registered
15:27:31: Particle Emitter Type 'Cylinder' registered
15:27:31: Particle Emitter Type 'Ring' registered
15:27:31: Particle Emitter Type 'HollowEllipsoid' registered
15:27:31: Particle Affector Type 'LinearForce' registered
15:27:31: Particle Affector Type 'ColourFader' registered
15:27:31: Particle Affector Type 'ColourFader2' registered
15:27:31: Particle Affector Type 'ColourImage' registered
15:27:31: Particle Affector Type 'ColourInterpolator' registered
15:27:31: Particle Affector Type 'Scaler' registered
15:27:31: Particle Affector Type 'Rotator' registered
15:27:31: Particle Affector Type 'DirectionRandomiser' registered
15:27:31: Particle Affector Type 'DeflectorPlane' registered
15:27:31: Plugin successfully installed
15:27:31: D3D9 : RenderSystem Option: Full Screen = No
15:27:31: D3D9 : RenderSystem Option: Video Mode = 800 x 600 @ 32-bit colour
15:27:31: CPU Identifier & Features
15:27:31: -------------------------
15:27:31: * CPU ID: GenuineIntel: Intel(R) Core(TM)2 CPU T7600 @ 2.33GHz
15:27:31: * SSE: yes
15:27:31: * SSE2: yes
15:27:31: * SSE3: yes
15:27:31: * MMX: yes
15:27:31: * MMXEXT: yes
15:27:31: * 3DNOW: no
15:27:31: * 3DNOWEXT: no
15:27:31: * CMOV: yes
15:27:31: * TSC: yes
15:27:31: * FPU: yes
15:27:31: * PRO: yes
15:27:31: * HT: no
15:27:31: -------------------------
15:27:31: D3D9 : Subsystem Initialising
15:27:31: ***************************************
15:27:31: *** D3D9 : Subsystem Initialised OK ***
15:27:31: ***************************************
15:27:31: D3D9RenderSystem::createRenderWindow "OgreView.Instance0", 446x201 windowed miscParams: parentWindowHandle=1574942 vsync=true
15:27:31: D3D9 : Created D3D9 Rendering Window 'OgreView.Instance0' : 446x201, 32bpp
15:27:31: Registering ResourceManager for type Texture
15:27:31: Registering ResourceManager for type GpuProgram
15:27:31: D3D9: Vertex texture format supported - PF_FLOAT32_RGB
15:27:31: D3D9: Vertex texture format supported - PF_FLOAT32_RGBA
15:27:31: D3D9: Vertex texture format supported - PF_FLOAT32_R
15:27:31: RenderSystem capabilities
15:27:31: -------------------------
15:27:31: * Hardware generation of mipmaps: yes
15:27:31: * Texture blending: yes
15:27:31: * Anisotropic texture filtering: yes
15:27:31: * Dot product texture operation: yes
15:27:31: * Cube mapping: yes
15:27:31: * Hardware stencil buffer: yes
15:27:31: - Stencil depth: 8
15:27:31: - Two sided stencil support: yes
15:27:31: - Wrap stencil values: yes
15:27:31: * Hardware vertex / index buffers: yes
15:27:31: * Vertex programs: yes
15:27:31: - Max vertex program version: vs_3_0
15:27:31: * Fragment programs: yes
15:27:31: - Max fragment program version: ps_3_0
15:27:31: * Texture Compression: yes
15:27:31: - DXT: yes
15:27:31: - VTC: no
15:27:31: * Scissor Rectangle: yes
15:27:31: * Hardware Occlusion Query: yes
15:27:31: * User clip planes: yes
15:27:31: * VET_UBYTE4 vertex element type: yes
15:27:31: * Infinite far plane projection: yes
15:27:31: * Hardware render-to-texture: yes
15:27:31: * Floating point textures: yes
15:27:31: * Non-power-of-two textures: yes
15:27:31: * Volume textures: yes
15:27:31: * Multiple Render Targets: 4
15:27:31: * Point Sprites: yes
15:27:31: * Extended point parameters: yes
15:27:31: * Max Point Size: 8192
15:27:31: * Vertex texture fetch: yes
15:27:31: - Max vertex textures: 4
15:27:31: - Vertex textures shared: no
15:27:31: ResourceBackgroundQueue - threading disabled
15:27:31: Particle Renderer Type 'billboard' registered
15:27:31: Creating viewport on target 'OgreView.Instance0', rendering from camera 'OgreView.Instance0Camera', relative dimensions L: 0.00 T: 0.00 W: 1.00 H: 1.00 ZOrder: 0
15:27:31: Viewport for camera 'OgreView.Instance0Camera', actual dimensions L: 0 T: 0 W: 446 H: 201
15:27:33: *-*-* OGRE Shutdown
15:27:33: Unregistering ResourceManager for type Compositor
15:27:33: Unregistering ResourceManager for type Font
15:27:33: Unregistering ResourceManager for type Skeleton
15:27:33: Unregistering ResourceManager for type Mesh
15:27:33: Unregistering ResourceManager for type HighLevelGpuProgram
15:27:33: Uninstalling plugin: ParticleFX
15:27:33: Plugin successfully uninstalled
15:27:33: Unloading library Plugin_ParticleFX
15:27:33: Uninstalling plugin: GL RenderSystem
15:27:33: *** Stopping Win32GL Subsystem ***
15:27:33: Plugin successfully uninstalled
15:27:33: Unloading library RenderSystem_GL
15:27:33: Uninstalling plugin: D3D9 RenderSystem
15:27:33: Render Target 'OgreView.Instance0' Average FPS: 0.986193 Best FPS: 0.986193 Worst FPS: 0.986193
15:27:33: D3D9 : Shutting down cleanly.
15:27:33: Unregistering ResourceManager for type Texture
15:27:33: Unregistering ResourceManager for type GpuProgram
15:27:33: D3D9 : Direct3D9 Rendering Subsystem destroyed.
15:27:33: Plugin successfully uninstalled
15:27:33: Unloading library RenderSystem_Direct3D9
15:27:33: Unregistering ResourceManager for type Material

Kerion

03-05-2007 22:12:46

Doh, my mistake. Luckily PJCast and the crew over at Wrecked have already encountered this in Visual Ogre Studio, and I figured it out from their source.

On the OnPaintBackground event of the UserControl, I need to call RenderWindow.Update.

That fixed the issue!