Cleaning up Meshviewer example. That was too confusing to use and the code got too long for one file.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4951 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
38d837348c
commit
1c9b2014b9
|
@ -46,6 +46,7 @@
|
|||
<Add library="Irrlicht" />
|
||||
</Linker>
|
||||
<Unit filename="main.cpp" />
|
||||
<Unit filename="main.h" />
|
||||
<Extensions>
|
||||
<code_completion />
|
||||
<debugger />
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,298 @@
|
|||
#ifndef EXAMPLE22_MATERIAL_VIEWER_MAIN_H
|
||||
#define EXAMPLE22_MATERIAL_VIEWER_MAIN_H
|
||||
|
||||
#include <irrlicht.h>
|
||||
|
||||
// Helper control to allow setting colors
|
||||
class CColorControl : public irr::gui::IGUIElement
|
||||
{
|
||||
public:
|
||||
CColorControl(irr::gui::IGUIEnvironment* guiEnv, const irr::core::position2d<irr::s32> & pos, const wchar_t *text, irr::gui::IGUIElement* parent, irr::s32 id=-1);
|
||||
|
||||
// Event receiver
|
||||
virtual bool OnEvent(const irr::SEvent &event);
|
||||
|
||||
// Set the color values
|
||||
void setColor(const irr::video::SColor& col);
|
||||
|
||||
// Get the color values
|
||||
const irr::video::SColor& getColor() const
|
||||
{
|
||||
return Color;
|
||||
}
|
||||
|
||||
// To reset the dirty flag
|
||||
void resetDirty()
|
||||
{
|
||||
DirtyFlag = false;
|
||||
}
|
||||
|
||||
// when the color was changed the dirty flag is set
|
||||
bool isDirty() const
|
||||
{
|
||||
return DirtyFlag;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
// Add a staticbox for a description + an editbox so users can enter numbers
|
||||
irr::gui::IGUIEditBox* addEditForNumbers(irr::gui::IGUIEnvironment* guiEnv, const irr::core::position2d<irr::s32> & pos, const wchar_t *text, irr::s32 id, irr::gui::IGUIElement * parent);
|
||||
|
||||
// Get the color value from the editfields
|
||||
irr::video::SColor getColorFromEdits();
|
||||
|
||||
// Fill the editfields with the value for the given color
|
||||
void setEditsFromColor(irr::video::SColor col);
|
||||
|
||||
private:
|
||||
|
||||
bool DirtyFlag;
|
||||
irr::video::SColor Color;
|
||||
irr::s32 ButtonSetId;
|
||||
irr::gui::IGUIStaticText * ColorStatic;
|
||||
irr::gui::IGUIEditBox * EditAlpha;
|
||||
irr::gui::IGUIEditBox * EditRed;
|
||||
irr::gui::IGUIEditBox * EditGreen;
|
||||
irr::gui::IGUIEditBox * EditBlue;
|
||||
};
|
||||
|
||||
/*
|
||||
Custom GUI-control for to edit all colors typically used in materials and lights
|
||||
*/
|
||||
class CTypicalColorsControl : public irr::gui::IGUIElement
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
CTypicalColorsControl(irr::gui::IGUIEnvironment* guiEnv, const irr::core::position2d<irr::s32> & pos, bool hasEmissive, irr::gui::IGUIElement* parent, irr::s32 id=-1);
|
||||
|
||||
// Destructor
|
||||
virtual ~CTypicalColorsControl();
|
||||
|
||||
// Set the color values to those within the material
|
||||
void setColorsToMaterialColors(const irr::video::SMaterial & material);
|
||||
|
||||
// Update all changed colors in the material
|
||||
void updateMaterialColors(irr::video::SMaterial & material);
|
||||
|
||||
// Set the color values to those from the light data
|
||||
void setColorsToLightDataColors(const irr::video::SLight & lightData);
|
||||
|
||||
// Update all changed colors in the light data
|
||||
void updateLightColors(irr::video::SLight & lightData) const;
|
||||
|
||||
// To reset the dirty flags
|
||||
void resetDirty();
|
||||
|
||||
private:
|
||||
CColorControl* ControlAmbientColor;
|
||||
CColorControl* ControlDiffuseColor;
|
||||
CColorControl* ControlSpecularColor;
|
||||
CColorControl* ControlEmissiveColor;
|
||||
};
|
||||
|
||||
/*
|
||||
GUI-Control to offer a selection of available textures.
|
||||
*/
|
||||
class CTextureControl : public irr::gui::IGUIElement
|
||||
{
|
||||
public:
|
||||
CTextureControl(irr::gui::IGUIEnvironment* guiEnv, irr::video::IVideoDriver * driver, const irr::core::position2d<irr::s32> & pos, irr::gui::IGUIElement* parent, irr::s32 id=-1);
|
||||
|
||||
virtual bool OnEvent(const irr::SEvent &event);
|
||||
|
||||
// Workaround for a problem with comboboxes.
|
||||
// We have to get in front when the combobox wants to get in front or combobox-list might be drawn below other elements.
|
||||
virtual bool bringToFront(irr::gui::IGUIElement* element);
|
||||
|
||||
// Return selected texturename (if any, otherwise 0)
|
||||
const wchar_t * getSelectedTextureName() const;
|
||||
|
||||
// Change active selectionbased on the texture name
|
||||
void selectTextureByName(const irr::core::stringw& name);
|
||||
|
||||
// Reset the dirty flag
|
||||
void resetDirty()
|
||||
{
|
||||
DirtyFlag = false;
|
||||
}
|
||||
|
||||
// When the texture was changed the dirty flag is set
|
||||
bool isDirty() const
|
||||
{
|
||||
return DirtyFlag;
|
||||
};
|
||||
|
||||
// Put the names of all currently loaded textures in a combobox
|
||||
void updateTextures(irr::video::IVideoDriver * driver);
|
||||
|
||||
private:
|
||||
bool DirtyFlag;
|
||||
irr::gui::IGUIComboBox * ComboTexture;
|
||||
};
|
||||
|
||||
/*
|
||||
Control which allows setting some of the material values for a meshscenenode
|
||||
*/
|
||||
struct SMaterialControl
|
||||
{
|
||||
// constructor
|
||||
SMaterialControl()
|
||||
: Initialized(false), Driver(0)
|
||||
, TypicalColorsControl(0), ButtonLighting(0), InfoLighting(0), ComboMaterial(0)
|
||||
{
|
||||
for (irr::u32 i=0; i<irr::video::MATERIAL_MAX_TEXTURES; ++i)
|
||||
TextureControls[i] = 0;
|
||||
}
|
||||
|
||||
// Destructor
|
||||
~SMaterialControl()
|
||||
{
|
||||
for (irr::u32 i=0; i<irr::video::MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
if (TextureControls[i] )
|
||||
TextureControls[i]->drop();
|
||||
}
|
||||
if ( TypicalColorsControl )
|
||||
TypicalColorsControl->drop();
|
||||
}
|
||||
|
||||
void init(irr::scene::IMeshSceneNode* node, irr::IrrlichtDevice * device, const irr::core::position2d<irr::s32> & pos, const wchar_t * description);
|
||||
|
||||
void update(irr::scene::IMeshSceneNode* sceneNode, irr::scene::IMeshSceneNode* sceneNode2T, irr::scene::IMeshSceneNode* sceneNodeTangents);
|
||||
|
||||
void updateTextures();
|
||||
|
||||
void selectTextures(const irr::core::stringw& name);
|
||||
|
||||
protected:
|
||||
|
||||
void updateMaterial(irr::video::SMaterial & material);
|
||||
|
||||
bool Initialized;
|
||||
irr::video::IVideoDriver * Driver;
|
||||
CTypicalColorsControl* TypicalColorsControl;
|
||||
irr::gui::IGUIButton * ButtonLighting;
|
||||
irr::gui::IGUIStaticText* InfoLighting;
|
||||
irr::gui::IGUIComboBox * ComboMaterial;
|
||||
CTextureControl* TextureControls[irr::video::MATERIAL_MAX_TEXTURES];
|
||||
};
|
||||
|
||||
/*
|
||||
Control to allow setting the color values of a lightscenenode.
|
||||
*/
|
||||
struct SLightNodeControl
|
||||
{
|
||||
// constructor
|
||||
SLightNodeControl() : Initialized(false), TypicalColorsControl(0)
|
||||
{}
|
||||
|
||||
~SLightNodeControl()
|
||||
{
|
||||
if ( TypicalColorsControl )
|
||||
TypicalColorsControl->drop();
|
||||
}
|
||||
|
||||
void init(irr::scene::ILightSceneNode* node, irr::gui::IGUIEnvironment* guiEnv, const irr::core::position2d<irr::s32> & pos, const wchar_t * description);
|
||||
|
||||
void update(irr::scene::ILightSceneNode* node);
|
||||
|
||||
protected:
|
||||
bool Initialized;
|
||||
CTypicalColorsControl* TypicalColorsControl;
|
||||
};
|
||||
|
||||
/*
|
||||
Application configuration
|
||||
*/
|
||||
struct SConfig
|
||||
{
|
||||
SConfig()
|
||||
: RenderInBackground(true)
|
||||
, DriverType(irr::video::EDT_NULL)
|
||||
, ScreenSize(640, 480)
|
||||
{
|
||||
}
|
||||
|
||||
bool RenderInBackground;
|
||||
irr::video::E_DRIVER_TYPE DriverType;
|
||||
irr::core::dimension2d<irr::u32> ScreenSize;
|
||||
};
|
||||
|
||||
/*
|
||||
Main application class
|
||||
*/
|
||||
class CApp : public irr::IEventReceiver
|
||||
{
|
||||
friend int main(int argc, char *argv[]);
|
||||
|
||||
public:
|
||||
// constructor
|
||||
CApp()
|
||||
: IsRunning(false)
|
||||
, Device(0)
|
||||
, MeshManipulator(0)
|
||||
, Camera(0)
|
||||
, SceneNode(0), SceneNode2T(0), SceneNodeTangents(0), NodeLight(0)
|
||||
, ControlVertexColors(0)
|
||||
, GlobalAmbient(0)
|
||||
{
|
||||
}
|
||||
|
||||
// destructor
|
||||
~CApp()
|
||||
{
|
||||
}
|
||||
|
||||
// Tell it to stop running
|
||||
void setRunning(bool appRuns)
|
||||
{
|
||||
IsRunning = appRuns;
|
||||
}
|
||||
|
||||
// Check if it should continue running
|
||||
bool isRunning() const
|
||||
{
|
||||
return IsRunning;
|
||||
}
|
||||
|
||||
// Event handler
|
||||
virtual bool OnEvent(const irr::SEvent &event);
|
||||
|
||||
protected:
|
||||
|
||||
// Application initialization
|
||||
// returns true when it was successful initialized, otherwise false.
|
||||
bool init(int argc, char *argv[]);
|
||||
|
||||
// Update one frame
|
||||
bool update();
|
||||
|
||||
// Run the application. Our main loop.
|
||||
void run();
|
||||
|
||||
// Close down the application
|
||||
void quit();
|
||||
|
||||
// Create some useful textures.
|
||||
void createDefaultTextures(irr::video::IVideoDriver * driver);
|
||||
|
||||
// Load a texture and make sure nodes know it when more textures are available.
|
||||
void loadTexture(const irr::io::path &name);
|
||||
|
||||
private:
|
||||
SConfig Config;
|
||||
bool IsRunning;
|
||||
irr::IrrlichtDevice * Device;
|
||||
irr::scene::IMeshManipulator* MeshManipulator;
|
||||
irr::scene::ICameraSceneNode * Camera;
|
||||
irr::scene::IMeshSceneNode* SceneNode;
|
||||
irr::scene::IMeshSceneNode* SceneNode2T;
|
||||
irr::scene::IMeshSceneNode* SceneNodeTangents;
|
||||
irr::scene::ILightSceneNode* NodeLight;
|
||||
SMaterialControl MeshMaterialControl;
|
||||
SLightNodeControl LightControl;
|
||||
CColorControl* ControlVertexColors;
|
||||
CColorControl* GlobalAmbient;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue