Page 1 of 2
CEGUI 0.7 and Irrlicht 1.6
Posted: Fri Oct 09, 2009 19:12
by DtD
Hey, I'm new to CEGUI and am trying to compile it with Irrlicht 1.6 using MSVS on Windows.
When I try to compile most things go good but I get several errors like this:
Code: Select all
Error 2 error C2039: 'c16' : is not a member of 'irr' c:\dev\tower_defense2\development2\cegui-0.7.0\cegui\include\renderermodules\irrlicht\ceguiirrlichtmemoryfile.h 61
What I am assuming is that 0.7 was made before Irrlicht 1.6 was finalized (judging by release dates) and something changed in the irr::io::IReadFile to make getFileName return "const io::path&" instead of "const irr::core::string<irr::c16>&" and they removed c16.
The following seems to fixes the problems (Once I get pcre so I can actually compile I can confirm it works)
In CEGUIIrrlichtMemeoryFile.h
replace
Code: Select all
const irr::core::string<irr::c16>& getFileName() const;
with
Code: Select all
const irr::io::path& getFileName() const;
replace
Code: Select all
irr::core::string<irr::c16> d_filename;
with
And in CEGUIIrrlichtMemoryFile.cpp
replace
Code: Select all
const irr::core::string<irr::c16>& IrrlichtMemoryFile::getFileName() const
with
Code: Select all
const irr::io::path& IrrlichtMemoryFile::getFileName() const
This GUI system looks awesome and I hope to be using it a lot in the future!
~DtD
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 10, 2009 08:20
by CrazyEddie
Hi,
Thanks for the heads up that 1.6 support is broken; I'd seen the release had been made, but did not have a chance to test. These issues will be fixed later on today
[Edit]
With regards to PCRE, if you're using VS 7.1, 8 (SP1), or 9, I point you in the direction of our precompiled dependency packs (linked to in the release announcement posts).
CE.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 10, 2009 16:00
by DtD
Thank you very much for your reply,
Yeah, I ended up getting the dependency package. I got CEGUI to compile but I get a ton of "libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll)" type errors. Other topics on the forums haven't been able to solve it. Still looking into things.
Ooops, I was compiling CEGUI with Debug and the Samples with Debug_Static. That seems to have fixed that. Then I got a link error consistent with using a Irrlicht Static Lib without _IRR_STATIC_LIB_ defined. So I defined that now the CEGUISampleHelper project gets a ton of thoose libcmtd.lib errors as well as one from irrlicht's lib:
"irrlicht.lib(Irrlicht.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj)"
There is also: "LINK : fatal error LNK1104: cannot open file 'd3dx9.lib'" at the very button.
I'm gonna keep trying to fix it, but if you notice something let me know!
~DtD
PS> CEGUISampleHelper compiled successfully before I fixed the debug, debug static switchout thing.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 10, 2009 16:15
by DtD
Ok, I switched out my self-compiled Static Irrlicht for the Dynamic Vanilla one and I cleaned the solution and it compiled everything.
Except it seems I compiled CEGUI without FreeType, so none of the samples run. DOH >.<
Hopefully it was the clean that fixed it, not the dynamic Irrlicht because I'd like to make everything static eventually.
Awesome, recompiled with FreeType and it seems to be 99% working. It was using OpenGL with Irrlicht by default, but I don't have OpenGL drivers so I recompiled again with DX9, and it looks good.
Also, it seems I found a bug. In Sample_TextDemo if you type something in the multiline (EG: "0169") and then backspace it deletes the 9 and jumps over the 6. Then the cursor is between 1 and 6 instead of at the end.
~DtD
BTW> In case you were wondering, I don't have OpenGL drivers because ATI stoppped supporting my graphics card and thier old Vista drivers do not work in Win7.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 10, 2009 18:08
by CrazyEddie
Hi,
The whole static / dynamic thing is a PITA, and depending on the exact code you're using things are dealt with differently. I'll save you the long version, but basically:
- Releases up to and including 0.7.0 used the wrong c/c++ runtime setting for static builds (the /MD and /MDd options instead of /MT and /MTd).
- The 0.7.x dependency packs contain a single version of the dependency libs, also built with the /MD and /MDd options.
- The CEGUI situation was fixed in the v0-7 branch a couple of weeks ago, though required matching dependency binaries, which were made available yesterday (the 0.7.x-r1 versions).
So basically, it's required to ensure that all components are built with the same runtime setting. For the current v0-7 code and future releases, this will be /MD and /MDd for dynamic builds and /MT and /MTd for static builds (since these are the most likely configurations people will be using). Failure to do this will create many linking issues, and also subsequent runtime issues if (or when) memory gets released across module boundaries.
I'll look into the editbox thing tomorrow
CE.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 17, 2009 18:42
by DtD
Ah, ok. Thanks, I will look into that!
I am also going to look into getting CEGUI to use IrrXML (Built in to Irrlicht, but can be used stand-alone) for XML phrasing, and maybe getting it to use Irrlicht's image loader. The only dependency left over would be PCRE which I honestly don't need anyway except for the spinner widgets.
Have you thought instead of using regex for the spinner widget that it might be easier to just check the input as it comes in if all the character(s) are numbers or a decimal? Regex just seems like overkill for something like that.
~DtD
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sat Oct 17, 2009 19:36
by CrazyEddie
With regards to image loading, so long as you're setting things up correctly this will already be using Irrlicht for the loading - if the log is reporting anything else as the ImageCodec (such as SILLY), then you're not initialising the system in such a way that it will use the integrated Irrlicht image codec. You can either create that yourself via a static call on the IrrluchtRenderer and pass it to the System::create function, or for most purposes can get the system to do it for you by way of the IrrlichtRenderer::bootstrapSystem function. Though note there is an outstanding bug as regards to the cleanup of the Irrlicht and Ogre integrated codecs when linking statically (will be fixed tomorrow).
With regards to the spinner and the use of regex, this is solely because the spinner is not a 'whole new widget' - but rather an Editbox instance with a couple of buttons stuck on the end. With 0.7.0, I've put in place the beginnings of the required mechanism to replace PCRE with other alternatives (so a lightweight, custom alternative would be possible), though this facility is not exposed to the user at this point in time.
CE.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Thu Nov 05, 2009 18:15
by DtD
Thank you very much for your help! I tried compiling CEGUI without SILLY, but without it there are linker errors:
Code: Select all
------ Build started: Project: Archetype, Configuration: Debug Win32 ------
Linking...
CEGUIBase_Static_d.lib(CEGUISystem.obj) : error LNK2019: unresolved external symbol _createImageCodec referenced in function "private: void __thiscall CEGUI::System::setupImageCodec(class CEGUI::String const &)" (?setupImageCodec@System@CEGUI@@AAEXABVString@2@@Z)
CEGUIBase_Static_d.lib(CEGUISystem.obj) : error LNK2019: unresolved external symbol _destroyImageCodec referenced in function "private: void __thiscall CEGUI::System::cleanupImageCodec(void)" (?cleanupImageCodec@System@CEGUI@@AAEXXZ)
Dev\DtDTowerDefense2.exe : fatal error LNK1120: 2 unresolved externals
It works with the SILLY codec compiled in though.
I got the new version of CEGUI along with the new dependency package and everything looks good. Also, in OpenGL with Irrlicht I get blurry windows:
In OpenGLIn DirectXI don't know if I mentioned this before, but I did not have OpenGL drivers on my system when I was first trying CEGUI, but I do now so I don't think that'd be the problem. Also, I should note that the examples work fine in OpenGL on my laptop. I made sure all the ATI enhancements were off on my desktop.
My log: (From desktop)
Code: Select all
05/11/2009 12:30:20 (Std) ---- Version 0.7.1 (Build: Nov 5 2009 Static Debug Microsoft Windows MSVC++ 9.0 32 bit) ----
05/11/2009 12:30:20 (Std) ---- Renderer module is: CEGUI::IrrlichtRenderer - Official Irrlicht based 2nd generation renderer module. RenderTarget support is enabled. ----
05/11/2009 12:30:20 (Std) ---- XML Parser module is: CEGUI::ExpatParser - Official expat based parser module for CEGUI ----
05/11/2009 12:30:20 (Std) ---- Image Codec module is: IrrlichtImageCodec - Integrated ImageCodec using the Irrlicht engine. ----
05/11/2009 12:30:20 (Std) ---- Scripting module is: None ----
The whole log is hereMy desktop:
Code: Select all
AMD Athlon 64 3200+ 2.0 GHz (Single Core)
3 GB of RAM
ATI Radeon X1600, 256MB (dxdiag in windows 7 reports 1662 MB VRAM, but I am pretty sure it is wrong.)
My laptop:
Code: Select all
Intel Core 2 Duo T7500 2.2GHz (Dual Core)
3 GB of RAM
Mobile Intel 965 Express Chipset Family, 358 MB
Also, this isn't so important, but CEGUI does not seem to like the Burning's Video Render in Irrlicht:
Code: Select all
missing shader: gl_src_alpha gl_one_minus_src_alpha
(Just shows a black screen, atleast in Demo7, FlaggardDemo, and FontDemo)
~DtD
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sun Mar 14, 2010 04:48
by agamemnus
I tried to set up CEGUI with Irrlicht today. My program hangs and then crashes. I run the start function after I run the irrlicht start function. (otherwise I just get a segfault)
I used these eight win32 lib and dll files:
CEGUIBase.dll /lib
CEGUIExpatParser.dll /lib
CEGUIFalagardWRBase.dll / lib
CEGUIIrrlichtRenderer.dll /lib
My header, and one called function that hangs and then crashes:
Code: Select all
#include "irrlichtwrapper.h"
#include "cegui\include\CEGUI.h"
#include "cegui\include\RendererModules\Irrlicht\CEGUIIrrlichtRenderer.h"
#include "cegui\include\falagard\CEGUIFalagard_xmlHandler.h"
#include "cegui\include\XMLParserModules\ExpatParser\CEGUIExpatParserModule.h"
extern IrrlichtDevice *device;
extern IVideoDriver* driver;
extern ISceneManager* smgr;
extern IGUIEnvironment* guienv;
extern "C" {
void DLL_EXPORT CEGUIStart ( void ) {
// CEGUI::IrrlichtRenderer &CEGUIrenderer =
// CEGUI::IrrlichtRenderer::bootstrapSystem(*device);
// return (void *)&CEGUIrenderer;
// CEGUI::IrrlichtRenderer& myRenderer =
CEGUI::IrrlichtRenderer::create( *device );
// CEGUI::System::create( myRenderer );
// return 0;
}
}
The MSVC+ 2008 Express Edition compile command:
/OUT:"Debug/IrrlichtWrapper.dll" /INCREMENTAL /NOLOGO /DLL /MANIFEST /MANIFESTFILE:"Debug\IrrlichtWrapper.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEF:".\IrrlichtWrapper.def" /DEBUG /PDB:"c:\se\oldstuff\IrrlichtWrapper\IrrlichtWrapper_source\Debug\IrrlichtWrapper.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /IMPLIB:"Debug/IrrlichtWrapper.lib" /MACHINE:X86 /ERRORREPORT:PROMPT .\irrlicht-1.7\lib\Win32-visualstudio\irrlicht.lib .\cegui\CEGUIBase.lib .\cegui\CEGUIIrrlichtRenderer.lib .\cegui\CEGUIFalagardWRBase.lib .\cegui\CEGUIExpatParser.lib
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sun Mar 14, 2010 17:06
by CrazyEddie
What does 'it crashes' mean? As programmers we generally need more information to go on than that.
From the little information given it seems you're linking the release version libs to a debug build. As I mentioned (twice, I think) in IRC last evening, you must ensure you link the debug versions (with the _d suffix) for the debug configuration of the project - this is absolutely essential, otherwise the C/C++ runtime used will not match.
CE.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sun Mar 14, 2010 17:11
by agamemnus
I switched to debug dlls and here is the error I get:
"Run-Time Check Failure #0: The value of ESP was not properly saved across a function call. This is usually the result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."
I should note I am using the latest irrlicht, 1.7.1.
Edit: Here's the current compile command:
/Od /I ".\irrlicht-1.7\include" /I ".\irrlicht-1.7\source\Irrlicht" /I ".\cegui\include" /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_USRDLL" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /Gm /EHsc /RTCu /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /Wp64 /TP /errorReport:prompt
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Sun Mar 14, 2010 20:25
by agamemnus
I didn't see your previous message, but I answered it. (I have ESP)
Using all debug, no-go.
Actually I'm extremely depressed right now that it crashes.
Very, very depressed...
More info:
* I am using MSVC 2008 Express Edition.
* I traced the crash to this function inside ceguiirrlichtrenderer.cpp:
Code: Select all
//----------------------------------------------------------------------------//
IrrlichtRenderer::IrrlichtRenderer(irr::IrrlichtDevice& device) :
d_device(device),
d_driver(d_device.getVideoDriver()),
d_displaySize(static_cast<float>(d_driver->getScreenSize().Width),
static_cast<float>(d_driver->getScreenSize().Height)),
d_displayDPI(96, 96),
d_defaultTarget(new IrrlichtWindowTarget(*this, *d_driver)),
d_defaultRoot(new RenderingRoot(*d_defaultTarget)),
d_maxTextureSize(2048),
d_eventPusher(new IrrlichtEventPusher(d_device.getCursorControl())),
d_supportsNSquareTextures(d_driver->queryFeature(irr::video::EVDF_TEXTURE_NSQUARE)),
d_supportsNPOTTextures(d_driver->queryFeature(irr::video::EVDF_TEXTURE_NPOT))
{ // <-------- here
if (d_driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
d_rendererID += String(" RenderTarget support is enabled.");
else
d_rendererID += String(" RenderTarget support is unavailable :(");
}
Device initialization code:
Code: Select all
bool DLL_EXPORT IrrStart(
int iDevice,
int iWidth,
int iHeight,
unsigned int iBPP,
bool boFullscreen,
bool boShadows,
bool boCaptureEvents,
bool vsync )
{
bool boInitStatus = false;
E_DRIVER_TYPE iDeviceTypes[] = {
EDT_NULL, EDT_SOFTWARE, EDT_SOFTWARE, EDT_OPENGL, EDT_DIRECT3D8, EDT_DIRECT3D9 };
// create an irrlicht device object the root of all irrlicht functionality
// if it is successfully created
if ( device = createDevice(
iDeviceTypes[iDevice],
dimension2d<u32>( iWidth, iHeight),
iBPP,
boFullscreen,
boShadows,
vsync,
boCaptureEvents ? &receiver : 0 ))
{
/* Get a pointer to the video driver, the SceneManager and the
graphical user interface environment */
// if we can successfully create these objects
if (( driver = device->getVideoDriver()) &&
( smgr = device->getSceneManager()) &&
( guienv = device->getGUIEnvironment()))
{
// the system has started up correctly
boInitStatus = true;
// dont pass events to the GUI
receiver.passToGUI = false;
// apply an unlight material to the scene so that drawing functions display in set color
SMaterial unlitMaterial;
unlitMaterial.Lighting = false;
driver->setMaterial(unlitMaterial);
}
}
return boInitStatus;
}
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Mon Mar 15, 2010 06:01
by agamemnus
Ok. Ok. I tried compiling cegui.
I have 5 errors when I try compiling the irrlicht renderer!!
Code: Select all
..\..\..\..\cegui\src\RendererModules\Irrlicht\CEGUIIrrlichtTextureTarget.cpp(124) : error C2664: 'irr::video::IVideoDriver::addRenderTargetTexture' : cannot convert parameter 1 from 'const irr::core::dimension2d<T>' to 'const irr::core::dimension2d<T> &'
..\..\..\..\cegui\src\RendererModules\Irrlicht\CEGUIIrrlichtTexture.cpp(131) : error C2664: 'irr::video::ITexture *irr::video::IVideoDriver::addTexture(const irr::core::dimension2d<T> &,const irr::io::path &,irr::video::ECOLOR_FORMAT)' : cannot convert parameter 1 from 'const irr::core::dimension2d<T>' to 'const irr::core::dimension2d<T> &'
..\..\..\..\cegui\src\RendererModules\Irrlicht\CEGUIIrrlichtTexture.cpp(225) : error C2664: 'irr::video::ITexture *irr::video::IVideoDriver::addTexture(const irr::core::dimension2d<T> &,const irr::io::path &,irr::video::ECOLOR_FORMAT)' : cannot convert parameter 1 from 'const irr::core::dimension2d<T>' to 'const irr::core::dimension2d<T> &'
./../../../cegui/include/RendererModules/Irrlicht/CEGUIIrrlichtMemoryFile.h(75) : error C2555: 'CEGUI::IrrlichtMemoryFile::getFileName': overriding virtual function return type differs and is not covariant from 'irr::io::IReadFile::getFileName'
../../../../cegui/include/RendererModules/Irrlicht/CEGUIIrrlichtMemoryFile.h(75) : error C2555: 'CEGUI::IrrlichtMemoryFile::getFileName': overriding virtual function return type differs and is not covariant from 'irr::io::IReadFile::getFileName'
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Mon Mar 15, 2010 10:08
by CrazyEddie
The particular assertion you're getting indicates one of two main possibilities. First, is that there is some conflict between calling conventions being used for some function, and second, is something is corrupting the stack somewhere.
Generally, if the assertion gets raised at the same point every time in every run, then it might indicate that it's a calling convention issues - but does not rule out stack corruption from elsewhere. If the assertion is raised at different times, and perhaps at random points in the code, then this is more indicative of stack corruption and we could be confident in ruling out calling convention issues.
Given the point where you indicate the assertion gets raised, I would say it could be a calling convention issues as regards to the Irrlicht lib. Can't be 100% sure though, these things are always somewhat difficult to diagnose and debug across the Internets.
With regards to the later compile issues, this is likely because the Irrlicht SDK version specified in the config.lua file is set incorrectly - probably at 14, whereas it should be set to 16.
HTH
CE.
Re: CEGUI 0.7 and Irrlicht 1.6
Posted: Mon Mar 15, 2010 18:16
by agamemnus
With those changes to the lua script, I was able to compile "CEGUIBase" and "CEGUIIrrlichtRenderer" lib/dll files with Irrlicht 1.7.1 with MSVC++ 2008 EE.
They have a different file size from the SDK version.The function with the bootstrap code now runs with no error. Thank you.