My Project
Public Member Functions | Protected Member Functions | List of all members
ParaEngine::CBufferPicking Struct Reference

picking from frame buffer (back buffer) When there is picking query, it will render scene again (if out dated) with a special shader and read pixels from the back buffer. More...

#include <BufferPicking.h>

Inheritance diagram for ParaEngine::CBufferPicking:
ParaEngine::AssetEntity ParaEngine::IAttributeFields ParaEngine::IObject ParaEngine::CRefCounted

Public Member Functions

 CBufferPicking (const AssetKey &key)
 
 ATTRIBUTE_DEFINE_CLASS (CBufferPicking)
 
virtual int InstallFields (CAttributeClass *pClass, bool bOverride)
 this class should be implemented if one wants to add new attribute. More...
 
virtual IAttributeFieldsGetChildAttributeObject (const std::string &sName)
 get attribute by child object. More...
 
virtual int GetChildAttributeObjectCount (int nColumnIndex=0)
 get the number of child objects (row count) in the given column. More...
 
virtual int GetChildAttributeColumnCount ()
 we support multi-dimensional child object. More...
 
virtual IAttributeFieldsGetChildAttributeObject (int nRowIndex, int nColumnIndex=0)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetPickingCount_s, int *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetPickingID_s, DWORD *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, FetchPickingResult_s, void **)
 
 ATTRIBUTE_METHOD (CBufferPicking, ClearPickingResult_s)
 
 ATTRIBUTE_METHOD (CBufferPicking, CheckDoPick_s)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetPickLeftTop_s, Vector2 *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, SetPickLeftTop_s, Vector2)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetPickWidthHeight_s, Vector2 *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, SetPickWidthHeight_s, Vector2)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, IsResultDirty_s, bool *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, SetResultDirty_s, bool)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetPickIndex_s, int *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, SetPickIndex_s, int)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, GetViewport_s, int *)
 
 ATTRIBUTE_METHOD1 (CBufferPicking, SetViewport_s, int)
 
virtual HRESULT InitDeviceObjects ()
 
virtual HRESULT DeleteDeviceObjects ()
 
DWORD Pick (int nX, int nY, int nViewportId=-1)
 pick by a point in the viewport. More...
 
int Pick (const QRect &region, int nViewportId=-1)
 pick in a rectangular region in the viewport to retrieve the actually result, use GetPickingResult(), which returns an array of unique picking id. More...
 
const vector< DWORD > & GetPickingResult ()
 return an array of unique picking id in the last pick call. More...
 
int GetPickingCount ()
 return the number of objects picked. More...
 
DWORD GetPickingID (int nIndex=0)
 get the picked item id of the given picking item. More...
 
void FetchPickingResult (DWORD **ppResult)
 
void ClearPickingResult ()
 clear last picking result
 
void SetPickLeftTop (const Vector2 &vPos)
 
const Vector2GetPickLeftTop ()
 
void SetPickWidthHeight (const Vector2 &vPos)
 
const Vector2GetPickWidthHeight ()
 
int GetPickIndex () const
 
void SetPickIndex (int val)
 
bool IsResultDirty () const
 
void SetResultDirty (bool bDirty=true)
 
int GetViewport () const
 
void SetViewport (int val)
 
void CheckDoPick (bool bForceUpdate=false)
 do picking using current picking rectangle. More...
 
- Public Member Functions inherited from ParaEngine::AssetEntity
 AssetEntity (const AssetKey &key)
 
 ATTRIBUTE_DEFINE_CLASS (AssetEntity)
 
 ATTRIBUTE_METHOD1 (AssetEntity, GetLocalFileName_s, const char **)
 
 ATTRIBUTE_METHOD1 (AssetEntity, SetLocalFileName_s, const char *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, GetRemoteAssetURL_s, const char **)
 
 ATTRIBUTE_METHOD1 (AssetEntity, IsValid_s, bool *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, IsLoaded_s, bool *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, IsLocked_s, bool *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, IsInitialized_s, bool *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, GetState_s, int *)
 
 ATTRIBUTE_METHOD1 (AssetEntity, SetState_s, int)
 
virtual AssetType GetType ()
 
virtual const std::string & GetIdentifier ()
 
virtual bool AutoSync (bool bForceSync=false, bool bLazyLoading=true)
 call this function to automatically sync with the remote server according to current asset state More...
 
virtual void Refresh (const char *sFilename=NULL, bool bLazyLoad=false)
 refresh the asset from local disk. More...
 
virtual const string & GetLocalFileName ()
 the actual local file name. More...
 
virtual void SetLocalFileName (const char *sFileName)
 
virtual string GetRemoteAssetURL ()
 get the remote server url of this asset. More...
 
virtual CParameterBlockGetParamBlock (bool bCreateIfNotExist=false)
 get effect parameter block with this object. More...
 
bool IsValid ()
 whether this is a valid resource object. More...
 
bool IsInitialized ()
 whether initialized. More...
 
virtual bool IsLoaded ()
 most assets are loaded asynchronously. More...
 
virtual int Release ()
 call this function to safely release this asset. More...
 
AssetKeyGetKey ()
 return the key object. More...
 
AssetState GetState ()
 return the asset state. More...
 
void SetState (AssetState state)
 set the asset state. More...
 
virtual IAttributeFieldsGetAttributeObject ()
 get the attribute object of this asset. More...
 
virtual HRESULT RestoreDeviceObjects ()
 
virtual HRESULT InvalidateDeviceObjects ()
 
virtual HRESULT RendererRecreated ()
 callback of listening the event that renderer was recreated on Android/WP8 all opengl related id has already become invalid at this time, no need to release them, just recreate them all in this function.
 
virtual void Cleanup ()
 Clean up additional resources. More...
 
void LoadAsset ()
 load asset. More...
 
void UnloadAsset ()
 unload asset. More...
 
void GarbageCollectMe ()
 if its reference count is zero, unload this asset object. More...
 
bool IsLocked ()
 whether this is a locked resource resource. More...
 
virtual bool Lock (int nMethod=0)
 Lock the object. More...
 
virtual void UnLock ()
 UnLock the object.
 
virtual bool GetBoundingBox (Vector3 *pMin, Vector3 *pMax)
 Get AABB bounding box of the asset object. More...
 
- Public Member Functions inherited from ParaEngine::IAttributeFields
virtual int GetAttributeClassID ()
 attribute class ID should be identical, unless one knows how overriding rules work. More...
 
virtual const char * GetAttributeClassName ()
 a static string, describing the attribute class object's name
 
virtual const char * GetAttributeClassDescription ()
 a static string, describing the attribute class object
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *)
 
 ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s)
 
 ATTRIBUTE_METHOD (IAttributeFields, AddRef_s)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *)
 
 ATTRIBUTE_METHOD (IAttributeFields, Release_s)
 
virtual void SetIdentifier (const std::string &sID)
 
virtual bool IsModified ()
 whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More...
 
virtual void SetModified (bool bModified)
 set whether any field has been modified. More...
 
virtual bool ValidateFields ()
 validate all fields and return true if validation passed. More...
 
virtual string GetValidationMessage ()
 get the recent validation message due to the most recent call to ValidateFields()
 
virtual bool ResetField (int nFieldID)
 Reset the field to its initial or default value. More...
 
virtual bool InvokeEditor (int nFieldID, const std::string &sParameters)
 Invoke an (external) editor for a given field. More...
 
virtual bool AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0)
 add child object. More...
 
virtual void * QueryObjectByName (const std::string &sObjectType)
 convert to object of a given type. More...
 
virtual void * QueryObject (int nObjectType)
 convert to object of a given type. More...
 
virtual int GetTime ()
 get the current local time in case it is animated in milli seconds frames. More...
 
virtual void SetTime (int nTime)
 
virtual CDynamicAttributeFieldGetDynamicField (const std::string &sName)
 Get a dynamic field with a given name. More...
 
virtual CDynamicAttributeFieldGetDynamicField (int nIndex)
 Get a dynamic field with a given index. More...
 
virtual const char * GetDynamicFieldNameByIndex (int nIndex)
 get field name by index
 
virtual int GetDynamicFieldCount ()
 how many dynamic field this object currently have. More...
 
virtual int SetDynamicField (const std::string &sName, const CVariable &value)
 set a dynamic field with a given name. More...
 
virtual int AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType)
 add dynamic field and return field index
 
virtual void RemoveAllDynamicFields ()
 remove all dynamic fields
 
virtual int SaveDynamicFieldsToString (std::string &output)
 save only text dynamic fields to fieldname = value text strings. More...
 
virtual int LoadDynamicFieldsFromString (const std::string &input)
 load only text dynamic fields from string More...
 
CAttributeClassGetAttributeClass ()
 get the main attribute class object. More...
 
void PrintObject ()
 print the content of this object to a text file at temp/doc/[ClassName].txt. More...
 
- Public Member Functions inherited from ParaEngine::IObject
virtual void Clone (IObject *obj) const
 Clone the object's contains to a pointer. More...
 
virtual IObjectClone () const
 Clone the object's contains and return a pointer to the newly created object. More...
 
virtual bool Equals (const IObject *obj) const
 Compare the object with another object. More...
 
virtual const ITypeGetType () const
 
virtual std::string ToString () const
 
WeakPtr_typeGetWeakReference ()
 get weak reference object. More...
 
virtual int ProcessObjectEvent (const ObjectEvent &event)
 this function is only used to backward compatibility of ParaObject:AddEvent() function. More...
 
- Public Member Functions inherited from ParaEngine::CRefCounted
void addref () const
 add reference count of the object. More...
 
bool delref () const
 decrease reference count of the object. More...
 
int GetRefCount () const
 get the reference count
 
CRefCountedAddToAutoReleasePool ()
 addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More...
 

Protected Member Functions

bool BeginBuffer ()
 
void DrawObjects ()
 
void EndBuffer ()
 
virtual CRenderTargetCreateGetRenderTarget (bool bCreateIfNotExist=true)
 a render target will be created with the same name as this object. More...
 
- Protected Member Functions inherited from ParaEngine::IAttributeFields
virtual CAttributeClassCreateAttributeClass ()
 initialize fields
 
virtual CDynamicAttributesSetGetDynamicAttributes (bool bCreateIfNotExist=false)
 

Additional Inherited Members

- Public Types inherited from ParaEngine::AssetEntity
enum  AssetState {
  ASSET_STATE_NORMAL, ASSET_STATE_LOCAL, ASSET_STATE_REMOTE, ASSET_STATE_CACHE,
  ASSET_STATE_SYNC_START, ASSET_STATE_SYNC_SUCCEED, ASSET_STATE_SYNC_FAIL, ASSET_STATE_FAILED_TO_LOAD
}
 the asset state. More...
 
enum  AssetType {
  base =0, texture, mesh, multianimation,
  spritevertex, font, sound, mdx,
  parax, database, effectfile, dllplugin,
  datagrid, cadMesh, image
}
 each asset type has a unique asset type number
 
- Public Types inherited from ParaEngine::IAttributeFields
typedef ParaEngine::weak_ptr< IObject, IAttributeFieldsWeakPtr_type
 
- Public Types inherited from ParaEngine::IObject
typedef ParaEngine::weak_ptr< IObjectWeakPtr_type
 
- Static Public Member Functions inherited from ParaEngine::AssetEntity
static const string & GetAssetServerUrl ()
 get the asset server url. More...
 
static void SetAssetServerUrl (const char *pStr)
 set the asset server url. More...
 
- Static Public Member Functions inherited from ParaEngine::IAttributeFields
static HRESULT GetAttributeClassID_s (IAttributeFields *cls, int *p1)
 
static HRESULT GetAttributeClassName_s (IAttributeFields *cls, const char **p1)
 
static bool OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false)
 Open a given file with the default registered editor in the game engine. More...
 
- Public Attributes inherited from ParaEngine::AssetEntity
AssetKey m_key
 this is the unique key object. More...
 
bool m_bIsInitialized
 whether this entity is initialized;Entity is by default lazily initialized
 
bool m_bIsValid
 whether this is a valid resource object. More...
 
- Protected Attributes inherited from ParaEngine::IObject
WeakPtr_type m_weak_reference
 
- Protected Attributes inherited from ParaEngine::CRefCounted
int m_refcount
 

Detailed Description

picking from frame buffer (back buffer) When there is picking query, it will render scene again (if out dated) with a special shader and read pixels from the back buffer.

We can query a single point or we can query a rectangle region in the current viewport and see if have hit anything. Please note: in order for buffer picking to work, each pickable object/component should assign a different picking id in its draw method. In other words, picking and drawing are done using the same draw function.

Member Function Documentation

§ CheckDoPick()

void ParaEngine::CBufferPicking::CheckDoPick ( bool  bForceUpdate = false)

do picking using current picking rectangle.

One do not need to call this manually, this function is called automatically when querying the picking result with GetPickingID and GetPickingCount.

Parameters
bForceUpdate: if true, we will force update. if false, we will only do picking when result is dirty.

§ CreateGetRenderTarget()

CRenderTarget * ParaEngine::CBufferPicking::CreateGetRenderTarget ( bool  bCreateIfNotExist = true)
protectedvirtual

a render target will be created with the same name as this object.

§ FetchPickingResult()

void ParaEngine::CBufferPicking::FetchPickingResult ( DWORD **  ppResult)
Parameters
ppResultthe caller needs to ensure that ppResult is at least GetPickingCount() big. Otherwise it will crash

§ GetChildAttributeColumnCount()

int ParaEngine::CBufferPicking::GetChildAttributeColumnCount ( )
virtual

we support multi-dimensional child object.

by default objects have only one column.

Reimplemented from ParaEngine::IAttributeFields.

§ GetChildAttributeObject()

IAttributeFields * ParaEngine::CBufferPicking::GetChildAttributeObject ( const std::string &  sName)
virtual

get attribute by child object.

used to iterate across the attribute field hierarchy.

Reimplemented from ParaEngine::IAttributeFields.

§ GetChildAttributeObjectCount()

int ParaEngine::CBufferPicking::GetChildAttributeObjectCount ( int  nColumnIndex = 0)
virtual

get the number of child objects (row count) in the given column.

please note different columns can have different row count.

Reimplemented from ParaEngine::IAttributeFields.

§ GetPickingCount()

int ParaEngine::CBufferPicking::GetPickingCount ( )

return the number of objects picked.

§ GetPickingID()

DWORD ParaEngine::CBufferPicking::GetPickingID ( int  nIndex = 0)

get the picked item id of the given picking item.

if no data at the index return 0.

Parameters
nIndexif -1, it will use m_currentPickIndex;

§ GetPickingResult()

const vector<DWORD>& ParaEngine::CBufferPicking::GetPickingResult ( )
inline

return an array of unique picking id in the last pick call.

§ InstallFields()

int ParaEngine::CBufferPicking::InstallFields ( CAttributeClass pClass,
bool  bOverride 
)
virtual

this class should be implemented if one wants to add new attribute.

This function is always called internally.

Reimplemented from ParaEngine::AssetEntity.

§ Pick() [1/2]

DWORD ParaEngine::CBufferPicking::Pick ( int  nX,
int  nY,
int  nViewportId = -1 
)

pick by a point in the viewport.

Tip: to pick a thin line, one may consider picking by a small rect region.

Parameters
nViewportIdviewport index, if -1 it means the current viewport.
Returns
the picking data directly. if 0 means nothing is picked.

§ Pick() [2/2]

int ParaEngine::CBufferPicking::Pick ( const QRect region,
int  nViewportId = -1 
)

pick in a rectangular region in the viewport to retrieve the actually result, use GetPickingResult(), which returns an array of unique picking id.

Parameters
nViewportIdviewport index, if -1 it means the current viewport.
Returns
the number of pixels in region that has hit something pickable.

The documentation for this struct was generated from the following files: