mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-25 15:35:23 +00:00
dd5901d351
Multiview shaders. Refactor Frustum management Rewrite shared shadow map cull mask should respect stereo Stereo savegame screencap LocalMap refactoring use the vertex buffer hint instead of the display list patch to enable/disable display lists Character preview fixes
130 lines
3.2 KiB
C++
130 lines
3.2 KiB
C++
#ifndef MWRENDER_CHARACTERPREVIEW_H
|
|
#define MWRENDER_CHARACTERPREVIEW_H
|
|
|
|
#include <osg/ref_ptr>
|
|
#include <memory>
|
|
|
|
#include <osg/PositionAttitudeTransform>
|
|
|
|
#include <components/esm3/loadnpc.hpp>
|
|
|
|
#include <components/resource/resourcesystem.hpp>
|
|
|
|
#include "../mwworld/ptr.hpp"
|
|
|
|
namespace osg
|
|
{
|
|
class Texture2D;
|
|
class Camera;
|
|
class Group;
|
|
class Viewport;
|
|
class StateSet;
|
|
}
|
|
|
|
namespace MWRender
|
|
{
|
|
|
|
class NpcAnimation;
|
|
class DrawOnceCallback;
|
|
class CharacterPreviewRTTNode;
|
|
|
|
class CharacterPreview
|
|
{
|
|
public:
|
|
CharacterPreview(osg::Group* parent, Resource::ResourceSystem* resourceSystem, const MWWorld::Ptr& character, int sizeX, int sizeY,
|
|
const osg::Vec3f& position, const osg::Vec3f& lookAt);
|
|
virtual ~CharacterPreview();
|
|
|
|
int getTextureWidth() const;
|
|
int getTextureHeight() const;
|
|
|
|
void redraw();
|
|
|
|
void rebuild();
|
|
|
|
osg::ref_ptr<osg::Texture2D> getTexture();
|
|
/// Get the osg::StateSet required to render the texture correctly, if any.
|
|
osg::StateSet* getTextureStateSet() { return mTextureStateSet; }
|
|
|
|
private:
|
|
CharacterPreview(const CharacterPreview&);
|
|
CharacterPreview& operator=(const CharacterPreview&);
|
|
|
|
protected:
|
|
virtual bool renderHeadOnly() { return false; }
|
|
void setBlendMode();
|
|
virtual void onSetup();
|
|
|
|
osg::ref_ptr<osg::Group> mParent;
|
|
Resource::ResourceSystem* mResourceSystem;
|
|
osg::ref_ptr<osg::StateSet> mTextureStateSet;
|
|
osg::ref_ptr<DrawOnceCallback> mDrawOnceCallback;
|
|
osg::ref_ptr<CharacterPreviewRTTNode> mRTTNode;
|
|
|
|
osg::Vec3f mPosition;
|
|
osg::Vec3f mLookAt;
|
|
|
|
MWWorld::Ptr mCharacter;
|
|
|
|
osg::ref_ptr<MWRender::NpcAnimation> mAnimation;
|
|
osg::ref_ptr<osg::PositionAttitudeTransform> mNode;
|
|
std::string mCurrentAnimGroup;
|
|
|
|
int mSizeX;
|
|
int mSizeY;
|
|
};
|
|
|
|
class InventoryPreview : public CharacterPreview
|
|
{
|
|
public:
|
|
|
|
InventoryPreview(osg::Group* parent, Resource::ResourceSystem* resourceSystem, const MWWorld::Ptr& character);
|
|
|
|
void updatePtr(const MWWorld::Ptr& ptr);
|
|
|
|
void update(); // Render preview again, e.g. after changed equipment
|
|
void setViewport(int sizeX, int sizeY);
|
|
|
|
int getSlotSelected(int posX, int posY);
|
|
|
|
protected:
|
|
osg::ref_ptr<osg::Viewport> mViewport;
|
|
|
|
void onSetup() override;
|
|
};
|
|
|
|
class UpdateCameraCallback;
|
|
|
|
class RaceSelectionPreview : public CharacterPreview
|
|
{
|
|
ESM::NPC mBase;
|
|
MWWorld::LiveCellRef<ESM::NPC> mRef;
|
|
|
|
protected:
|
|
|
|
bool renderHeadOnly() override { return true; }
|
|
void onSetup() override;
|
|
|
|
public:
|
|
RaceSelectionPreview(osg::Group* parent, Resource::ResourceSystem* resourceSystem);
|
|
virtual ~RaceSelectionPreview();
|
|
|
|
void setAngle(float angleRadians);
|
|
|
|
const ESM::NPC &getPrototype() const {
|
|
return mBase;
|
|
}
|
|
|
|
void setPrototype(const ESM::NPC &proto);
|
|
|
|
private:
|
|
|
|
osg::ref_ptr<UpdateCameraCallback> mUpdateCameraCallback;
|
|
|
|
float mPitchRadians;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|