Compiling irrlicht ogl-es branch for iphone (progress)

You are an experienced programmer and have a problem with the engine, shaders, or advanced effects? Here you'll get answers.
No questions about C++ programming or topics which are answered in the tutorials!
keless
Posts: 805
Joined: Mon Dec 15, 2003 10:37 pm
Location: Los Angeles, California, USA

Post by keless »

wildrj wrote:Yeah..couldnt get it to work lol.. Few questions..

1. how do i go about creating a iphone static library project in xcode.
2. What frameworks do i include and from were *exact plz* i seem to get stuck at the frameworks part alot.
3. WHY IS THIS SO DIFFICULT!
I'm not currently working on the same stuff you are, but there is a trick to adding Frameworks in XCode.

Initially when you want to add a framework, you may see a list of frameworks but cant find the one(s) you want. Maybe you see OGL but not OGLES. This is because by default XCode likes to open the dialog in the OSX frameworks folder INSTEAD OF THE IPHONE frameworks folder.

Unfortunately, you cannot make the dialog simply 'back upwards' until you find the iPhone sdk directory (making it seem like there are no other choices)-- instead you have to tell it to start at the root folder and search down until you find it. It may help you to open Finder separately and locate the directory, then follow that path in the XCode add framework dialog.
a screen cap is worth 0x100000 DWORDS
shaderman
Posts: 1
Joined: Thu Aug 13, 2009 2:02 am

Post by shaderman »

hybrid wrote: Why does the scene needs alpha ordering, I thought that tile based rendering does no sorting at all? Irrlicht sorts in order to reduce render state changes, which is the most important for tile based rendering.
Actually tile-based deferred renderers sort to determine tile coverage. If the tile pass includes alpha blending/testing then the TBDR must separate these into a second tile pass. The second pass requires that all previous tile pass operations be done (i.e. flushed).

Alpha operation are expensive on direct renderers and TBDRs but TBDRs incur a penalty over direct renderers because the alpha operations must be wholly deferred whereas a direct renderer does no reordering.

Alpha operations are nearly always more expensive because of the RMW memory bus operation. Modern renderers can mitigate some of the expense of alpha operations with heavy use of cache/CAM memories. Either way, it's expensive.

Sorting to reduce render state changes is good practice on nearly all renderers (probably even software ones too).
pir
Posts: 24
Joined: Wed Apr 29, 2009 8:15 pm

Post by pir »

Hi!

I recently downloaded the latest version of Irrlicht and added it to my iPhone app. I'm new to SourceForge, so I do not know how to see where I can see the name of the label of the latest source, but I think it is 2452.

My problem is that my app is running very slow when using the new version of Irrlicht on the device. The animations are not really slow, they are performed with very low "resolution". There are no problems when running the app in the emulator. Is there someone that has seen the same thing? Would be very greatful for an answer.

BR
pir
digijohnny
Posts: 63
Joined: Sat Sep 12, 2009 6:08 pm
Contact:

Iphone up and running

Post by digijohnny »

Managed to successfully build for Real Device
looks great, i ported the 08.SpecialFX demo with no changes to EMT flags

all gauraud shades no trans-parents and no texts rendered, but the lighting looks great x.mesh is very smooth

so my question is.......

what EMaterial flags are best used with this OGL-ES driver
garixi
Posts: 1
Joined: Thu Jul 30, 2009 10:50 am

multitouch?

Post by garixi »

Rockfish wrote:I just completed some changes that add IPhone Touch Events to Irrlicht. I modeled it after the mouse events.

This solves a problem with the way Touch events work on IPhone. The events go to the view created in CIrrDeviceIPhone.m and not to the view created in the user's application. Also the IPhone methods are in ObjectiveC. With these changes the touches are posted like the other events making it easy to receive them in C++ classes anywhere in the application.

You can find the files at http://www.rockfishnw.com/media/files/TouchEvents.zip

I have also included a test class called ISceneNodeAnimatorCameraTouch. It is modeled after the FPS animator. It moves a camera through a scene when the user touches the screen.

These changes are based off the current revision in the ogl-es branch.
Does your library use multitouch?i'm trying to compile your files adding and replacing existing files on the ogles branche but file CIrrDeviceIphone.m doesn't compile
he failes due the CIrrDeviceIphone.h import.Have you any suggest?
zillion42
Posts: 324
Joined: Wed Aug 29, 2007 12:32 am
Location: Hamburg, Germany

Post by zillion42 »

I just got an iphone 3gs with 3.1 (un(jail)broken)
Now I'm little bit into Xcode and without reading the whole thread I'd like to ask (probably answered somewhere):

Can I compile and run irrlicht on my iphone yet ?

EDIT:
Ok ignore the above... I'll try.

|
|
\/
THX
Last edited by zillion42 on Fri Sep 25, 2009 12:06 am, edited 1 time in total.
biino
Posts: 7
Joined: Mon Apr 13, 2009 1:32 am

Post by biino »

I can confirm that the latest SVN OpenglES branch works on the the Iphone. But it doesn't compile out of the box. (I believe that's coming soon however) This thread is pretty handy for resolving most of the compilation issues.

Once you have it compiled be sure to download fuzzy's template as it solves a bunch of niggly issues with getting it to work as well.

Bino
ym1218
Posts: 19
Joined: Mon Jun 15, 2009 3:47 am

Post by ym1218 »

cannot dowload FuzzYspo0N's template, someone can help me? Thanks
FuzzYspo0N wrote:Thats right zenja, there is no view / window attached.

Seeing as the irrlicht is the main focus on being "publicly working" this will benefit a lot of people too.

Code: Select all

http://www.mediafire.com/file/i1juyzy3mzz/iPhoneTemplateApp.zip
That is an empty application template and xcode project that will build with the correct lib files from the irrlicht stuff. If you can build libs, you ca take a stab at getting it to work (in terms of silly issues like, debug lib with debug version of app, simulator/device issues etc).

EDIT : changed the profiles in the project.
Though i left these in for reference, oh well ;p
FuzzYspo0N
Posts: 914
Joined: Fri Aug 03, 2007 12:43 pm
Location: South Africa
Contact:

Post by FuzzYspo0N »

Hey, weird that you cant download it?

Send me a PM with your email address and ill email it to you instead :)
cnsoft
Posts: 1
Joined: Sat Sep 20, 2008 5:26 pm

Post by cnsoft »

@FuzzYspo0N
such as rapidshare.com or sites.google.com ?
mediafire.com is evil..
zillion42
Posts: 324
Joined: Wed Aug 29, 2007 12:32 am
Location: Hamburg, Germany

Post by zillion42 »

I checked out the irrlicht-ogl-es branch with svn:

Code: Select all

svn co https://irrlicht.svn.sourceforge.net/svnroot/irrlicht/branches/ogl-es irrlicht-ogl-es
read this,
1. Created a new XCode iPhone Static Library project. Added include and source group folders.

2. Add existing files from Irrlicht ogl-es include and source tree.
Then cleaned it up by removing any files that are not in the MacOSX project.

4. Added the following lines to IrrCompileConfig.h around line 81 after the #if defined(__APPLE__) bit.

#undef _IRR_USE_OSX_DEVICE_
#define _IRR_IPHONE_PLATFORM_
#define _IRR_USE_IPHONE_DEVICE_

5. In CIrrDeviceIPhone.cpp and .h
a. Rename setResizeAble to setResizable
b. Added the 'void CIrrDeviceIPhone::minimizeWindow(){}' method to the .cpp
c. Added extern "C" in front 'IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx(...' in the .cpp
d. Removed the enclosing 'namespace base { }'

6. Changed the line in COpenGLExtensionHandler.cpp where it sets MaxTextureUnits to
MaxTextureUnits = core::min_(static_cast<u8>(val),static_cast<u8>(MATERIAL_MAX_TEXTURES));

I think at this point the library should build. For the app:
and followed the steps above and skipped point 5 and 6, since hybrid stated he fixed that and I get heaploads of compiler errors, which boil down to more or less one:
In file included from /Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/source/Irrlicht/C3DSMeshFileLoader.cpp:5:
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/include/IrrCompileConfig.h:5:1: error: unterminated #ifndef
error: unterminated #ifndef
something obviously wrong with my compile config... anyone got an idea ?
the block from line 81 - 94 looks like this now...

Code: Select all

#if defined(__APPLE__) || defined(MACOSX)

#undef _IRR_USE_OSX_DEVICE_
#define _IRR_IPHONE_PLATFORM_
#define _IRR_USE_IPHONE_DEVICE_

#if !defined(MACOSX)

#define MACOSX // legacy support

#endif

#define _IRR_OSX_PLATFORM_

#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)

#define _IRR_IPHONE_PLATFORM_

#define _IRR_COMPILE_WITH_IPHONE_DEVICE_

#if !defined(_IRR_USE_LINUX_DEVICE_) && !defined(_IRR_USE_CONSOLE_DEVICE_) && !defined(_IRR_USE_SDL_DEVICE_)

#define _IRR_COMPILE_WITH_OSX_DEVICE_

#endif

#endif

thx in advance

EDIT:

commented irrCompileConfig.h line 5:
//#ifndef __IRR_COMPILE_CONFIG_H_INCLUDED__
and I looks like it's doing it... ?
unfortunately now I get:
error: GLES/gl.h: No such file or directory
error: GLES/egl.h: No such file or directory
EDIT2:
I added:
Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/System/Library/Frameworks/OpenGLES.framework/
with no result... hmm

EDIT3:
just checking out:
svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev
which includes egl.h, see if that helps...

EDIT4:
Slowly getting somewhere, I ignored that unofficial googlecode iphone sdk, which however looks interesting and changed:
#define _IRR_USE_IPHONE_DEVICE_
to
#define _IRR_COMPILE_WITH_IPHONE_DEVICE_
now I get:
error: cannot allocate an object of abstract type 'irr::CIrrDeviceIPhone'
which sounds familiar... well already checked, it says
void CIrrDeviceIPhone::setResizeable(bool resize)
here, also it says:
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx
hmm...

EDIT5:
I reduced it to this one error by also removing OSXClipboard.mm aswell as libjpeg and png (whole folder) and wondering about the notes next to the last remaining error:

Code: Select all

/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/source/Irrlicht/CIrrDeviceIPhone.cpp:275: error: cannot allocate an object of abstract type 'irr::CIrrDeviceIPhone'
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/source/Irrlicht/CIrrDeviceIPhone.h:60: note:   because the following virtual functions are pure within 'irr::CIrrDeviceIPhone':
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/include/IrrlichtDevice.h:211: note: 	virtual void irr::IrrlichtDevice::setResizable(bool)
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/include/IrrlichtDevice.h:217: note: 	virtual void irr::IrrlichtDevice::maximizeWindow()
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/include/IrrlichtDevice.h:220: note: 	virtual void irr::IrrlichtDevice::restoreWindow()
/Users/tobi/Documents/irrlicht-olg-es/../../sdks/irrlicht-ogl-es/include/IrrlichtDevice.h:243: note: 	virtual irr::E_DEVICE_TYPE irr::IrrlichtDevice::getType() const
again any help appreciated ! I call it a day for now...
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

Ok, I've fixed the ifdef thing (forgot to commit last time, sorry). Also added the missing methods to the IPhone device. Since I cannot test that device it didn't occur to me. Not sure about the Clipboard thing, though.
zillion42
Posts: 324
Joined: Wed Aug 29, 2007 12:32 am
Location: Hamburg, Germany

Post by zillion42 »

@ hybrid

thx a lot. Well I'm getting new errors now which really confuse me... basically they stem from:
error: OpenGL/OpenGL.h: No such file or directory
that seems to happen because COGLESDriver.h in line 15 actually tries to include MacOSX/CIrrDeviceMacOSX.h which it really shouldn't because that's explicitly undefined in the compile config... ? The whole block from line 10 - 18 in COGLESDriver.h looks like it should only do that if _IRR_COMPILE_WITH_OSX_DEVICE_ is defined, which it isn't, it's undefined...

Code: Select all

#if defined(_IRR_WINDOWS_API_)

	// include windows headers for HWND

	#define WIN32_LEAN_AND_MEAN

	#include <windows.h>

#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)

	#include "MacOSX/CIrrDeviceMacOSX.h"

#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)

	#include "CIrrDeviceIPhone.h"

#endif
I'm little confused also if it's supposed to be

Code: Select all

#undef _IRR_COMPILE_WITH_OSX_DEVICE_
or

Code: Select all

#undef _IRR_USE_OSX_DEVICE_
I used both now, here's the compile config again, from line 81 - 97

Code: Select all

#if defined(__APPLE__) || defined(MACOSX)

#undef _IRR_COMPILE_WITH_OSX_DEVICE_
#undef _IRR_USE_OSX_DEVICE_

#define _IRR_IPHONE_PLATFORM_ 

#define _IRR_COMPILE_WITH_IPHONE_DEVICE_

#if !defined(MACOSX)

#define MACOSX // legacy support

#endif

#define _IRR_OSX_PLATFORM_

#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)

#define _IRR_IPHONE_PLATFORM_

#define _IRR_COMPILE_WITH_IPHONE_DEVICE_

#endif

#if !defined(_IRR_USE_LINUX_DEVICE_) && !defined(_IRR_USE_CONSOLE_DEVICE_) && !defined(_IRR_USE_SDL_DEVICE_)

#define _IRR_COMPILE_WITH_OSX_DEVICE_

#endif

#endif
thx again for any help

EDIT:
Solved it now by searching for the next occurance of

Code: Select all

#define _IRR_COMPILE_WITH_OSX_DEVICE_
which is at line 94...

Code: Select all

#if !defined(_IRR_USE_LINUX_DEVICE_) && !defined(_IRR_USE_CONSOLE_DEVICE_) && !defined(_IRR_USE_SDL_DEVICE_)
//#define _IRR_COMPILE_WITH_OSX_DEVICE_
... So to sum it up:

The current svn ogl-es branch compiles for iphone with the following changes in the compile config.
after line 81, starting from 82 add the 3 lines:

Code: Select all

#undef _IRR_COMPILE_WITH_OSX_DEVICE_
#define _IRR_IPHONE_PLATFORM_ 
#define _IRR_COMPILE_WITH_IPHONE_DEVICE_
and comment out the next occurance of define osx device which is at line 94...
thx a lot, I'll try an example app now and take a look at the touch events...
zillion42
Posts: 324
Joined: Wed Aug 29, 2007 12:32 am
Location: Hamburg, Germany

Post by zillion42 »

trying to compile FuzzYspo0N's template I get linking errors:

Code: Select all

ld: duplicate symbol _createDeviceEx in ../build/Release-iphonesimulator/libirrlichtsim.a(Irrlicht.o) and ../build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o)
I readded the libraries to the project (one for sim one for dev, deleting the old references) and created a new Group 'include' to which I added the include dir from the sdk (deleting the old include group) and I switched to Release-iphonesimulator 3.1 because thats how I compiled the lib aswell...
any ideas ?

EDIT:
I know it might look like spam, but here's the complete build, lots of warnings aswell...
../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtApplication.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore -lirrlichtsim -lirrlichtdev -o ../iPhoneTemplateApp/build/Release-iphonesimulator/irrlichtApplication.app/irrlichtApplication
ld warning: in ../irrlicht-olg-es/build/Release-iphoneos/libirrlichtdev.a, file is not of required architecture
ld warning: irr::core::irrAllocator<char>::internal_delete(void*)has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::irrAllocator<char>::~irrAllocator()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::irrAllocator<char>::~irrAllocator()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::irrAllocator<char>::internal_new(unsigned long)has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::string<char, irr::core::irrAllocator<char> >& irr::core::string<char, irr::core::irrAllocator<char> >::operator=<char>(char const*)has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::string<char, irr::core::irrAllocator<char> >::string<char>(char const*)has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::string<char, irr::core::irrAllocator<char> >::~string()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::string<char, irr::core::irrAllocator<char> >::~string()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::string<char, irr::core::irrAllocator<char> >::~string()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: vtable for irr::core::string<char, irr::core::irrAllocator<char> >has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: typeinfo for irr::core::string<char, irr::core::irrAllocator<char> >has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: vtable for irr::core::irrAllocator<char>has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: typeinfo for irr::core::irrAllocator<char>has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: typeinfo name for irr::core::string<char, irr::core::irrAllocator<char> >has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: typeinfo name for irr::core::irrAllocator<char>has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceIPhone-D6E45659.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::irrAllocator<char>::internal_delete(void*)has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceStub.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o
ld warning: irr::core::irrAllocator<char>::~irrAllocator()has different visibility (default) in ../irrlicht-olg-es/build/Release-iphonesimulator/libirrlichtsim.a(CIrrDeviceStub.o) and (hidden) in ../iPhoneTemplateApp/build/irrlichtApplication.build/Release-iphonesimulator/irrlichtApplication.build/Objects-normal/i386/irrlichtAppDelegate.o

EDIT2:
Ok I got rid of all the warnings by recompiling the lib and app for os 2.2 sim, but I'm still getting the fatal duplicate symbol _createDeviceEx
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

Yes, there were two such methods. Due to the device creation change, I had to remove the method from IPhoneDevice and add a new device symbol. Hope it works now, completely untested!
Post Reply