Commit 817e160c authored by D-AIRY's avatar D-AIRY

continue

parent be1ab96b

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.21005.1
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vcxproj", "{97D8EE94-0A6D-47F2-BE01-63F7C89715BC}"
ProjectSection(ProjectDependencies) = postProject
......@@ -354,12 +354,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xWindow", "..\..\xWindow\vs
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xEngine", "..\..\xEngine\vs2013\xEngine.vcxproj", "{D2386C4E-7032-487B-8EAD-951778AD6EBC}"
ProjectSection(ProjectDependencies) = postProject
{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E}
{C1C1F046-C839-4602-AF70-923CDD237C1B} = {C1C1F046-C839-4602-AF70-923CDD237C1B}
{718C186E-9155-41DF-B8AB-74ED03E204CD} = {718C186E-9155-41DF-B8AB-74ED03E204CD}
{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {8144D5F8-07D0-4663-AAAE-11053614FAC5}
EndProjectSection
EndProject
Global
......@@ -1032,55 +1027,55 @@ Global
{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{0292BE32-298E-4E18-BC42-5A39F9487EBA} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{BE976610-EE71-4D57-8733-2FE43BF602F5} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{718C186E-9155-41DF-B8AB-74ED03E204CD} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{D2386C4E-7032-487B-8EAD-951778AD6EBC} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6A3341BF-710B-4310-A7F8-810040D698DC} = {5128FBE9-1706-4255-B422-4A652320085E}
{709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
{AFBF200A-9260-4469-AE64-DCB42C796DD6} = {5128FBE9-1706-4255-B422-4A652320085E}
{A2B9EACA-69C1-4E9D-AF3C-704608DB57DE} = {5128FBE9-1706-4255-B422-4A652320085E}
{9C34362D-7FA6-4BD1-A48B-8FDE541344B0} = {5128FBE9-1706-4255-B422-4A652320085E}
{CEFD4247-0B36-4268-B455-C1E826173005} = {5128FBE9-1706-4255-B422-4A652320085E}
{B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E}
{D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E}
{A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E}
{4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
{7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
{6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{A57B87BE-C63D-C64F-A06E-C48B4723C51A} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{EF2EC91D-F2A6-BD43-89AC-8054F3D5EECA} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{D6ECE531-C294-BC42-8C32-6F09F1240325} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{60A46FEB-576C-7B40-A047-D6079D9D66C4} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{072A60D2-317A-CC41-AD12-7E381235064A} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{46A17C83-2972-4C41-B67F-224640089085} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{E74F00B5-7DC5-DC48-8E91-D1C2296F455F} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{F2DD3789-7BC9-D241-8C8D-2179933B30DD} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{ED53EB62-C809-1649-A203-948AF1412B4C} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{BE976610-EE71-4D57-8733-2FE43BF602F5} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{15CBFEFF-7965-41F5-B4E2-21E8795C9159} = {BE976610-EE71-4D57-8733-2FE43BF602F5}
{CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC} = {BE976610-EE71-4D57-8733-2FE43BF602F5}
{3A214E06-B95E-4D61-A291-1F8DF2EC10FD} = {BE976610-EE71-4D57-8733-2FE43BF602F5}
{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{718C186E-9155-41DF-B8AB-74ED03E204CD} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E}
{F2DD3789-7BC9-D241-8C8D-2179933B30DD} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{ED53EB62-C809-1649-A203-948AF1412B4C} = {6376944C-E417-43FD-8B56-073A310EB7D9}
{6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E}
{8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {2D039A6D-B874-4AA7-8F89-E86DD70B21ED}
{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{9117FCDB-957B-4FF8-8AD4-90965159B721} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
{15AD3AF2-47B1-4836-9777-F1249EB299A7} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
{DAFA20F5-5162-4F21-99AF-DB8084D3C557} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
{709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
{A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E}
{E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
{5145958A-F75F-4F6D-9793-7384B616CF76} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
{D3C5E57C-2E56-4911-94C0-9D6DB5AF3962} = {846B2EA2-15BC-40C4-B273-47A1D40E8BE9}
{F0BA654B-EFF1-4F48-8ED5-4B1AA6888687} = {C3CAABF6-9239-4133-86E3-44DF79A67AF6}
{C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
{16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{D2386C4E-7032-487B-8EAD-951778AD6EBC} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
EndGlobalSection
EndGlobal
......@@ -185,7 +185,12 @@
<ClCompile Include="..\..\..\source\common\string.cpp" />
<ClCompile Include="..\..\..\source\common\string_utils.cpp" />
<ClCompile Include="..\..\..\source\editors_utils\axes_helper.cpp" />
<ClCompile Include="..\..\..\source\skyxengine.cpp" />
<ClCompile Include="..\..\..\source\skyxengine.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\source\terrax\CommandCreate.cpp" />
<ClCompile Include="..\..\..\source\terrax\CommandDelete.cpp" />
<ClCompile Include="..\..\..\source\terrax\CommandMove.cpp" />
......
......@@ -83,8 +83,8 @@ public:
}
else if(wdesc.iPosX == 0 && wdesc.iPosY == 0)
{
wdesc.iPosX = XCW_USEDEFAULT;
wdesc.iPosY = XCW_USEDEFAULT;
wdesc.iPosX = XCW_CENTER;
wdesc.iPosY = XCW_CENTER;
}
wdesc.iSizeX = (int)uWidth;
wdesc.iSizeY = (int)uHeight;
......@@ -130,8 +130,8 @@ int main(int argc, char **argv)
CWindowCallback cb(pEngine);
XWINDOW_DESC wdesc;
wdesc.iPosX = XCW_USEDEFAULT;
wdesc.iPosY = XCW_USEDEFAULT;
wdesc.iPosX = XCW_CENTER;
wdesc.iPosY = XCW_CENTER;
wdesc.iSizeX = 800;
wdesc.iSizeY = 600;
wdesc.szTitle = "SkyXEngine build";
......@@ -142,6 +142,10 @@ int main(int argc, char **argv)
pEngine->initGraphics(pWindow->getOSHandle(), &engineCb);
// pEngine->initServer();
pEngine->getCore()->execCmd("exec ../config_game.cfg");
pEngine->getCore()->execCmd("exec ../config_game_user.cfg");
int ret = pEngine->start();
mem_release(pWindow);
......
......@@ -72,6 +72,7 @@ void CAsyncFileReader::loadFile(const char *szFile, IAsyncFileReaderCallback *pC
{
CIOTask *pTask = new CIOTask(szFile, m_pFileSystem, pCallback);
m_vpQueue.push_back(pTask);
pTask->AddRef();
g_pTaskManager->addTaskIO(pTask);
}
......
......@@ -22,10 +22,21 @@ CCore::CCore(const char *szName)
ConsoleConnect(szName);
ConsoleRegisterCmds();
Core_0RegisterCVarBool("g_time_run", true, "Запущено ли игрвоое время?");
Core_0RegisterCVarFloat("g_time_speed", 1.f, "Скорость/соотношение течения игрового времени");
Core_0RegisterCVarBool("g_time_run", true, "Запущено ли игрвоое время?", FCVAR_NOTIFY);
Core_0RegisterCVarFloat("g_time_speed", 1.f, "Скорость/соотношение течения игрового времени", FCVAR_NOTIFY);
Core_0RegisterCVarBool("dbg_config_save", false, "Отладочный вывод процесса сохранения конфига");
Core_0RegisterCVarInt("r_stats", 1, "Показывать ли статистику? 0 - нет, 1 - fps и игровое время, 2 - показать полностью");
Core_0RegisterConcmd("on_g_time_run_change", []()
{
static const bool * g_time_run = GET_PCVAR_BOOL("g_time_run");
Core_TimeWorkingSet(Core_RIntGet(G_RI_INT_TIMER_GAME), *g_time_run);
});
Core_0RegisterConcmd("on_g_time_speed_change", []()
{
static const float * g_time_speed = GET_PCVAR_FLOAT("g_time_speed");
Core_TimeSpeedSet(Core_RIntGet(G_RI_INT_TIMER_GAME), *g_time_speed);
});
m_pPluginManager = new CPluginManager();
......@@ -233,11 +244,81 @@ void CCore::shutdownUpdatable()
}
}
UINT_PTR CCore::getCrtOutputHandler()
UINT_PTR XMETHODCALLTYPE CCore::getCrtOutputHandler()
{
return(Core_ConsoleGetOutHandler());
}
//! @FIXME Remove that!
extern std::mutex g_conUpdMtx;
extern CConcurrentQueue<char*> g_vCommandBuffer;
void XMETHODCALLTYPE CCore::execCmd(const char *szCommand)
{
execCmd2("%s", szCommand);
}
void CCore::execCmd2(const char * szFormat, ...)
{
va_list va;
va_start(va, szFormat);
size_t len = _vscprintf(szFormat, va) + 1;
char * buf, *cbuf = NULL;
if(len < 4096)
{
buf = (char*)alloca(len * sizeof(char));
}
else
{
cbuf = buf = new char[len];
}
vsprintf(buf, szFormat, va);
va_end(va);
//g_vCommandBuffer
char * nl;
do
{
nl = strstr(buf, "\n");
if(nl)
{
*nl = 0;
++nl;
while(isspace(*buf))
{
++buf;
}
if(!(*buf == '/' && *(buf + 1) == '/') && (len = strlen(buf)))
{
char * str = new char[len + 1];
memcpy(str, buf, len + 1);
g_conUpdMtx.lock();
g_vCommandBuffer.push(str);
g_conUpdMtx.unlock();
}
buf = nl;
}
}
while(nl);
while(isspace(*buf))
{
++buf;
}
if(!(*buf == '/' && *(buf + 1) == '/') && (len = strlen(buf)))
{
char * str = new char[len + 1];
memcpy(str, buf, len + 1);
g_conUpdMtx.lock();
g_vCommandBuffer.push(str);
g_conUpdMtx.unlock();
}
mem_delete_a(cbuf);
}
//##########################################################################
C SXCORE_API IXCore* XCoreInit(const char *szName)
......
......@@ -35,7 +35,10 @@ public:
void shutdownUpdatable();
void runUpdate() override;
UINT_PTR getCrtOutputHandler() override;
UINT_PTR XMETHODCALLTYPE getCrtOutputHandler() override;
void XMETHODCALLTYPE execCmd(const char *szCommand) override;
void execCmd2(const char * szFormat, ...) override;
protected:
IBaseEventChannel *getEventChannelInternal(const XGUID &guid) override;
......
......@@ -59,6 +59,23 @@ protected:
int m_iEnd;
};
//##########################################################################
class CTaskStub: public ITaskImpl<ITask>
{
public:
CTaskStub():
ITaskImpl(CORE_TASK_FLAG_BACKGROUND)
{
}
void run()
{
}
};
//##########################################################################
CTaskManager::CTaskManager(unsigned int numThreads):
m_isSingleThreaded(false),
m_isRunning(false)
......@@ -97,7 +114,6 @@ void CTaskManager::forceSinglethreaded()
void CTaskManager::addTask(TaskPtr task)
{
task->AddRef();
unsigned int flags = task->getFlags();
if(flags & CORE_TASK_FLAG_ON_SYNC)
......@@ -128,7 +144,6 @@ void CTaskManager::addTask(TaskPtr task)
void CTaskManager::addTaskIO(TaskPtr task)
{
task->AddRef();
task->stopRepeating();
m_aIOTasks.push(task);
m_ConditionIOThread.notify_one();
......@@ -138,7 +153,7 @@ void CTaskManager::add(THREAD_UPDATE_FUNCTION fnFunc, DWORD dwFlag)
{
TaskPtr pTask = new CTask(fnFunc, dwFlag);
addTask(pTask);
mem_release(pTask);
// mem_release(pTask);
}
void CTaskManager::start()
......@@ -191,9 +206,9 @@ void CTaskManager::start()
{
worker(true);
}
*/
m_aiNumWaitFor.clearFast();
*/
sheduleNextBunch();
}
......@@ -253,11 +268,21 @@ void CTaskManager::stop()
m_isRunning = false;
m_ConditionIOThread.notify_all();
m_ConditionWorker.notify_all();
ITask *pStubTask = new CTaskStub();
for(int i = 0, l = m_aThreads.size() - 1; i < l; ++i)
{
pStubTask->AddRef();
}
for(int i = 0, l = m_aThreads.size(); i < l; ++i)
{
addTask(pStubTask);
}
for(int i = 0, l = m_aThreads.size(); i < l; ++i)
{
m_aThreads[i]->join();
delete m_aThreads[i];
mem_delete(m_aThreads[i]);
}
m_aThreads.clear();
if(m_pIOThread)
......@@ -275,7 +300,10 @@ void CTaskManager::execute(TaskPtr t)
{
addTask(t);
}
mem_release(t);
else
{
mem_release(t);
}
}
void CTaskManager::workerMain()
......@@ -296,9 +324,21 @@ void CTaskManager::worker(bool bOneRun)
while(m_isRunning)
{
if(m_BackgroundTasks.tryPop(task))
if(bOneRun)
{
if(!m_BackgroundTasks.tryPop(task))
{
return;
}
}
else
{
task = m_BackgroundTasks.pop();
}
//if(m_BackgroundTasks.tryPop(task))
{
//printf("#%d: Executing task\n", Core_MGetThreadID());
task->AddRef();
execute(task);
if(task->getFlags() & (CORE_TASK_FLAG_FRAME_SYNC/* | CORE_TASK_FLAG_ON_SYNC*/))
......@@ -321,10 +361,10 @@ void CTaskManager::worker(bool bOneRun)
m_ConditionFor.notify_one();
}
mem_release(task);
//std::this_thread::yield();
}
else
/*else
{
if(bOneRun)
{
......@@ -340,7 +380,7 @@ void CTaskManager::worker(bool bOneRun)
// std::this_thread::yield();
//std::this_thread::sleep_for(std::chrono::microseconds(166));
}
}*/
}
}
......@@ -393,7 +433,7 @@ ID CTaskManager::forLoop(int iStart, int iEnd, const IParallelForBody *pBody, in
iCur = (std::min)(iTotal, iChunkSize);
TaskPtr pTask = new CTaskForLoop(id, pBody, iStart, iStart + iCur);
addTask(pTask);
mem_release(pTask);
// mem_release(pTask);
iTotal -= iCur;
iStart += iCur;
}
......
......@@ -38,7 +38,7 @@ SOCKET CommandSocket = INVALID_SOCKET;
bool g_bRunning = false;
bool g_bRunningCmd = false;
typedef CConcurrentQueue<char *> CommandBuffer;
typedef CConcurrentQueue<char*> CommandBuffer;
typedef std::mutex Mutex;
CommandBuffer g_vCommandBuffer;
Stack<CommandBuffer> g_cbufStack;
......
......@@ -544,23 +544,23 @@ SX_LIB_API void Core_0RegisterCVarPointer(
//! Получает указатель на значение строкового квара. При отсутствии квара запрошенного типа возвращает NULL
SX_LIB_API const char ** Core_0GetPCVarString(const char * name);
#define GET_PCVAR_STRING(k) Core_0GetPCVarString(k);
#define GET_PCVAR_STRING(k) Core_0GetPCVarString(k)
//! Получает указатель на значение целочисленного квара. При отсутствии квара запрошенного типа возвращает NULL
SX_LIB_API const int * Core_0GetPCVarInt(const char * name);
#define GET_PCVAR_INT(k) Core_0GetPCVarInt(k);
#define GET_PCVAR_INT(k) Core_0GetPCVarInt(k)
//! Получает указатель на значение дробного квара. При отсутствии квара запрошенного типа возвращает NULL
SX_LIB_API const float * Core_0GetPCVarFloat(const char * name);
#define GET_PCVAR_FLOAT(k) Core_0GetPCVarFloat(k);
#define GET_PCVAR_FLOAT(k) Core_0GetPCVarFloat(k)
//! Получает указатель на значение логического квара. При отсутствии квара запрошенного типа возвращает NULL
SX_LIB_API const bool * Core_0GetPCVarBool(const char * name);
#define GET_PCVAR_BOOL(k) Core_0GetPCVarBool(k);
#define GET_PCVAR_BOOL(k) Core_0GetPCVarBool(k)
//! Получает указатель по имени. При отсутствии квара запрошенного типа возвращает NULL
SX_LIB_API UINT_PTR * Core_0GetPCVarPointer(const char * name);
#define GET_PCVAR_POINTER(k) Core_0GetPCVarPointer(k);
#define GET_PCVAR_POINTER(k) Core_0GetPCVarPointer(k)
//! Устанавливает новое значение квара. Должен существовать
SX_LIB_API void Core_0SetCVarString(const char * name, const char * value);
......
......@@ -527,8 +527,9 @@ GameData::GameData(HWND hWnd, bool isGame):
//Core_0RegisterCVarFloat("r_default_fov", 45.0f, "Default FOV value");
Core_0RegisterCVarBool("cl_mode_editor", false, "Editor control mode");
Core_0RegisterCVarBool("cl_grab_cursor", true, "Grab cursor on move");
Core_0RegisterCVarBool("cl_grab_cursor", false, "Grab cursor on move");
Core_0RegisterCVarFloat("cl_mousesense", 0.001f, "Mouse sense value");
Core_0RegisterCVarBool("cl_bob", true, "View bobbing");
Core_0RegisterCVarFloat("cl_bob_walk_y", 0.1f, "View bobbing walk y amplitude");
......
......@@ -49,8 +49,6 @@ void QuadGetSphere(const float2 &vMin, const float2 &vMax, float &fRadius, float
COcclusionCulling::COcclusionCulling()
{
m_isEnable = true;
m_pFrustum = 0;
m_iCountFC = 0;
m_iCountFCfail = 0;
......
/***********************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
......@@ -16,19 +16,19 @@ See the license in LICENSE
extern IGXContext *g_pDevice;
//! occlusion culling
//! коэффициент размера буфера глубины occlusion culling
#define OC_SIZE_COEF 0.25f
//! ( ) occlusion culling true
//! дистанция (в метрах) при которой тест occlusion culling всегда будет давать true
#define OC_DIST_NEAR_NOT_CULL 4.f
//! occlusion culling
//! погрешность разниц глубин для теста occlusion culling
//static float g_fOCbiasDepth = 0.0001f;
//!
//! количество пикселей расширения треугольников для
const float g_fOCextTriangle = 2.f;
//! occlusion culling
//! небольшео расширение бокса для теста occlusion culling
const float3 g_cvOCext(0.05f, 0.05f, 0.05f);
#define OC_MAX_MUTEX_COUNT 512
......@@ -56,31 +56,31 @@ public:
COcclusionCulling();
~COcclusionCulling();
//!
//! инициализация на основании размеров рендера
void init(int iWidth, int iHeight);
//!
//! обработка потери устройства
void onLostDevice();
//!
//! обработк сброса устройства
void onResetDevice(int iWidth, int iHeight);
//! /
//! установка включен/выключен тест
void setEnable(bool isEnable);
//!
//! возвращает текущее состояния влюченности теста
bool getEnable();
/*!
\param idDepthMap - rt
\param pFrustum -
/*! обновление данных теста
\param idDepthMap - идентификатор rt глубины
\param pFrustum - фрустум камеры
*/
void update(ID idDepthMap, const IFrustum *pFrustum);
//!
//! репроекция старого буфера глубины на основании новых матриц
void reprojection();
//!
//! просчет видимости бокса
bool comVisible(const float3 *pMax, const float3 *pMin);
void ensureUpdateDone();
......@@ -133,7 +133,7 @@ protected:
vNewPos.x = vNewPos.x * 0.5f + 0.5f;
vNewPos.y = (vNewPos.y * (-0.5f) + 0.5f);
// ,
//костыль решения проблем округления, без этого будут белые линии
vNewPos2.x = float(int(vNewPos.x * 10000.f) / 10000.f);
vNewPos2.y = float(int(vNewPos.y * 10000.f) / 10000.f);
......@@ -156,7 +156,7 @@ protected:
int qwerty = 0;
else
{
// ,
//если в буфере репроекции нет записей для текущего пикселя, либо записанная глубина меньше чем новая
std::lock_guard<std::mutex> lock(m_pArrDepthBufferMutex[iPosPixel % OC_MAX_MUTEX_COUNT]);
if(m_pArrDepthBufferReProjection[iPosPixel] >= 1.f || vNewPos.z > m_pArrDepthBufferReProjection[iPosPixel])
......@@ -245,22 +245,22 @@ protected:
void ensureReprojectionDone();
//! surfaces
//! массив surfaces для обработки
IGXSurface *m_pSurfDepthBuffer[3];
//!
//! массив глубины
float *m_pArrDepthBuffer = 0;
//!
//! массив мировых координат
float4 *m_pArrWorldPos = 0;
//!
//! массив репроекционной глубины
float *m_pArrDepthBufferReProjection = 0;
//! (debug)
//! массив растеризации (debug)
float *m_pArrDepthBufferRasterize = 0;
//!
//! массив замков синхронизации
std::mutex *m_pArrDepthBufferMutex = 0;
COCReprojection *m_pReprojectionCycle = 0;
......@@ -268,28 +268,28 @@ protected:
COCUpdate *m_pUpdateCycle = 0;
ID m_idUpdateCycle = -1;
//!
bool m_isEnable;
//! включен ли тест
bool m_isEnable = false;
//!
//! прошлая видовая матрица
float4x4 m_mOldView;
//!
//! прошлая проекционная матрица
float4x4 m_mOldProj;
//!
//! общее количество пикселей в буфере для теста
int m_iCountPixels;
//!
//! ширина буфера теста
int m_iWidth;
//!
//! высота буфера теста
int m_iHeight;
//!
//! массив ке глубин
ID m_aRTdepth[2];
//! #m_aRTdepth
//! текущий ключ массива #m_aRTdepth
int m_iCurrRTdepth;
......@@ -297,7 +297,7 @@ protected:
ID m_idPS_ScreenOut;
ID m_idPS_FindMax9;
//!
//! текущий фрустум камеры
const IFrustum *m_pFrustum;
int m_iCountFC;
......
......@@ -305,8 +305,8 @@ SX_LIB_API void SGCore_OnResetDevice()
SG_PRECOND(_VOID);
//g_pFPStext->OnResetDevice();
g_pManagerRenderTargets->OnResetDevice();
g_pOC->onResetDevice(0/*g_oD3DAPP.BackBufferWidth*/, 9/*g_oD3DAPP.BackBufferHeight*/);
// g_pManagerRenderTargets->OnResetDevice();
// g_pOC->onResetDevice(0/*g_oD3DAPP.BackBufferWidth*/, 9/*g_oD3DAPP.BackBufferHeight*/);
InitFullScreenQuad();
gcore_data::rt_id::iHowAdaptedLum = 0;
......
......@@ -749,6 +749,13 @@ namespace gui
{
rf = rf->getParent();
}
for(UINT i = 0, l = m_ReflowQueue.size(); i < l; ++i)
{
if(m_ReflowQueue[i] == rf)
{
return;
}
}
m_ReflowQueue.push_back(rf);
return;
#endif
......
......@@ -80,58 +80,9 @@ void rfunc::SetRenderSceneFilterUn()
bool rfunc::ComDeviceLost(bool isSetWindowSize)
{
static int *r_resize = (int*)GET_PCVAR_INT("r_resize");
static int *r_win_width = (int*)GET_PCVAR_INT("r_win_width");
static int *r_win_height = (int*)GET_PCVAR_INT("r_win_height");
static const bool *r_win_windowed = GET_PCVAR_BOOL("r_win_windowed");
if(isSetWindowSize && *r_resize != RENDER_RESIZE_CHANGE)
{
//получаем текущий размер окна в которое рисовали
RECT rect_scene;
GetClientRect(gdata::hHandle3D, &rect_scene);
*r_win_width = rect_scene.right;
*r_win_height = rect_scene.bottom;
if(!*r_win_width || !*r_win_height)
{
return(false);
}
}
//сбрасываем все что необходимо для восстановления устройства
SGCore_OnLostDevice();
// SGreen_OnLostDevice();
// SGeom_OnLostDevice();
SMtrl_OnLostDevice();
// SPE_OnLostDevice();
// SPP_OnLostDevice();
// SGame_OnLostDevice();
rfunc::InitModeWindow();
bool bf = SGCore_OnDeviceReset(*r_win_width, *r_win_height, *r_win_windowed);
LibReport(REPORT_MSG_LEVEL_WARNING, "r_win_width %d, r_win_height %d, r_win_windowed %d \n", *r_win_width, *r_win_height, *r_win_windowed);
/*if (bf)
{
//если все-таки функция зашла сюда значит что-то было неосвобождено
LibReport(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n");
}
else
{*/
gdata::InitAllMatrix();
*r_resize = RENDER_RESIZE_NONE;
SGCore_OnResetDevice();
// SGeom_OnResetDevice();
SMtrl_OnResetDevice();
// SGreen_OnResetDevice();
// SPE_OnResetDevice();
// SGame_OnResetDevice();
// SPP_OnDeviceReset();
// gdata::pDXDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// }
return(true);
}
......
......@@ -49,7 +49,11 @@ SX_LIB_API void SRender_0Create(const char *szName, HWND hWnd3D, HWND hWndParent
return;
}
}