Files
2022-10-26 12:25:11 +08:00

166 lines
3.8 KiB
Objective-C

// managermultiloader.h
#ifndef _3DRENDERER_MANAGERMULTILOADER_H_
#define _3DRENDERER_MANAGERMULTILOADER_H_
#include "managerbase.h"
#include <programcommon/wzqueue.h>
#include <programcommon/wzarray.h>
class CThreadObject;
// 멀티쓰레드 로딩 스타일
#define MLS_TEXTURE (0x00000001)
#define MLS_WZD (0x00000002)
#define MLS_DEFAULT (MLS_TEXTURE | MLS_WZD) // 전부 사용
// 로딩 객체 타입
enum ENUM_LOADOBJTYPE
{
LOT_TEXTURE = 0,
LOT_WZD
};
// 로딩 큐 타입
enum ENUM_LOAD_QUEUE_TYPE
{
QUEUE_TYPE_QUICK = 0,
QUEUE_TYPE_NORMAL,
NUM_QUEUE_TYPE
};
// 로딩 객체
struct St_LoadObject
{
ENUM_LOADOBJTYPE m_eLoadObjType;
DWORD m_dwObject;
};
// Loader function
void ThreadFunc_Loader( void* pParam );
//------------------------------------------------------------------------------
/**
@class CManagerMultiLoader
*/
class CManagerMultiLoader : public CManagerBase
{
public:
// 생성자/소멸자
CManagerMultiLoader();
virtual ~CManagerMultiLoader();
// 생성/파괴
virtual BOOL Create( CDrawBase* pParentDraw, void* pParam );
virtual void Destroy();
// 큐에 객체 추가
virtual void AddObjectToLoad( ENUM_LOADOBJTYPE eLoadObjType,
DWORD dwObject,
ENUM_LOAD_QUEUE_TYPE eyTpe = QUEUE_TYPE_NORMAL );
// 로딩
virtual void New_Load();
// 멀티 쓰레드 로딩 켜기/끄기
void TurnOn_MultiThreadedLoading( BOOL bOn );
// 멀티 쓰레드 로딩 여부
BOOL IsTurnedOn_MultiThreadedLoading( DWORD dwStyle ) const;
// 로딩 스타일 설정/얻기
void SetMultiThreadedLoadingStyle( DWORD dwStyle );
DWORD GetMultiThreadedLoadingStyle() const;
// 로딩할 객체 수 얻기
DWORD GetNumberOfLoadObject( ENUM_LOAD_QUEUE_TYPE eType );
// 초당 로딩 수 설정 (xxx: 사용 안함)
void SetLoadCountPerSecond( int LoadPerSecond );
// 쓰레드 멈춤 (xxx: 사용 안함)
void ExitMultiThreadedLoading();
protected:
// 쓰레드 객체 생성/파괴
BOOL CreateThreadObject();
void DestroyThreadObject();
private:
// 변수 초기화
void InitVariables();
// 해제
void ReleaseContents();
protected:
CWzQueue<St_LoadObject> m_loadQ[NUM_QUEUE_TYPE];
CThreadObject* m_pLoaderThread;
DWORD m_dwLoadingStyle;
BOOL m_bOn;
WzDeclare_Sync( LoadObject );
};
//------------------------------------------------------------------------------
/**
*/
inline void CManagerMultiLoader::TurnOn_MultiThreadedLoading( BOOL bOn )
{
m_bOn = bOn;
}
//------------------------------------------------------------------------------
/**
*/
inline BOOL CManagerMultiLoader::IsTurnedOn_MultiThreadedLoading( DWORD dwStyle ) const
{
return( m_bOn && ((m_dwLoadingStyle & dwStyle) == dwStyle) );
}
//------------------------------------------------------------------------------
/**
*/
inline void CManagerMultiLoader::SetMultiThreadedLoadingStyle( DWORD dwStyle )
{
m_dwLoadingStyle = dwStyle;
}
//------------------------------------------------------------------------------
/**
*/
inline DWORD CManagerMultiLoader::GetMultiThreadedLoadingStyle() const
{
return m_dwLoadingStyle;
}
//------------------------------------------------------------------------------
/**
*/
inline DWORD CManagerMultiLoader::GetNumberOfLoadObject( ENUM_LOAD_QUEUE_TYPE eType )
{
WzSync_This( LoadObject );
WzAssert( eType >= 0 && eType < NUM_QUEUE_TYPE );
return m_loadQ[eType].GetCount();
}
//------------------------------------------------------------------------------
/**
*/
inline void CManagerMultiLoader::SetLoadCountPerSecond( int )
{
// 사용 안함
}
//------------------------------------------------------------------------------
/**
*/
inline void CManagerMultiLoader::ExitMultiThreadedLoading()
{
// 사용 안함
}
#endif // _3DRENDERER_MANAGERMULTILOADER_H_