#ifndef __ORCUSOTMRENDERER_RENDERER_H__
#define __ORCUSOTMRENDERER_RENDERER_H__
#include <vector>
#include <map>
#ifndef ORSDK_DLL
#define ORSDK_DLL K_DLLIMPORT
#endif
#define ORCUSTOMRENDERERCALLBACK__CLASSNAME ORCustomRendererCallback
#define ORCUSTOMRENDERERCALLBACK__CLASSSTR "ORCustomRendererCallback"
#define ORCUSTOMRENDERERCALLBACK__DESCSTR "OR - Sample Renderer Callback"
class ORSDK_DLL ORCustomRendererCallback : public FBRendererCallback
{
public:
virtual bool FBCreate() override;
virtual void FBDestroy() override;
virtual const char* GetCallbackName() const override;
virtual const char* GetCallbackDesc() const override;
virtual unsigned int GetCallbackPrefCount() const override;
virtual const char* GetCallbackPrefName(unsigned int pIndex) const override;
virtual void Attach() override;
virtual void Detach() override;
virtual void DetachDisplayContext(FBViewingOptions* pViewOption) override;
virtual void Render(FBRenderOptions* pRenderOptions) override;
void CacheSceneGraphSet(bool pValue);
protected:
void OnPerFrameRenderingPipelineCallback (
HISender pSender,
HKEvent pEvent);
void OnPerFrameEvaluationPipelineCallback (
HISender pSender,
HKEvent pEvent);
protected:
unsigned int mAttachCount;
void RenderWithSimpleIterating(FBRenderOptions* pRenderOptions);
void RenderWithCachedInfo(FBRenderOptions* pRenderOptions);
void CacheSceneReset();
void CacheSceneFullRestructure();
typedef std::pair<FBModel*, int> _ORModelRenderItem;
typedef std::vector<_ORModelRenderItem> _ORModelRenderItemList;
typedef std::map<FBMaterial*, _ORModelRenderItemList*> _ORModelRenderItemListPerMaterialMap;
_ORModelRenderItemListPerMaterialMap mModelRenderItemListPerMaterialMap;
bool mNeedFullRestructure;
};
#endif