Сначала надо сделать расчёт мешей в отдельном потоке
This commit is contained in:
@@ -85,10 +85,6 @@ struct World {
|
||||
|
||||
};
|
||||
|
||||
struct DefVoxelInfo {
|
||||
|
||||
};
|
||||
|
||||
struct DefWorldInfo {
|
||||
|
||||
};
|
||||
@@ -153,7 +149,7 @@ public:
|
||||
} Binary;
|
||||
|
||||
struct {
|
||||
std::unordered_map<DefVoxelId_t, DefVoxelInfo> DefVoxel;
|
||||
std::unordered_map<DefVoxelId_t, DefVoxel_t> DefVoxel;
|
||||
std::unordered_map<DefNodeId_t, DefNode_t> DefNode;
|
||||
std::unordered_map<DefWorldId_t, DefWorldInfo> DefWorld;
|
||||
std::unordered_map<DefPortalId_t, DefPortalInfo> DefPortal;
|
||||
|
||||
@@ -50,11 +50,21 @@ struct PP_Content_RegionRemove : public ParsedPacket {
|
||||
{}
|
||||
};
|
||||
|
||||
struct PP_Definition_FreeNode : public ParsedPacket {
|
||||
DefNodeId_t Id;
|
||||
struct PP_Definition_Voxel : public ParsedPacket {
|
||||
DefVoxelId_t Id;
|
||||
DefVoxel_t Def;
|
||||
|
||||
PP_Definition_FreeNode(DefNodeId_t id)
|
||||
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::Node),
|
||||
PP_Definition_Voxel(DefVoxelId_t id, DefVoxel_t def)
|
||||
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::Voxel),
|
||||
Id(id), Def(def)
|
||||
{}
|
||||
};
|
||||
|
||||
struct PP_Definition_FreeVoxel : public ParsedPacket {
|
||||
DefVoxelId_t Id;
|
||||
|
||||
PP_Definition_FreeVoxel(DefVoxelId_t id)
|
||||
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::FreeVoxel),
|
||||
Id(id)
|
||||
{}
|
||||
};
|
||||
@@ -69,6 +79,15 @@ struct PP_Definition_Node : public ParsedPacket {
|
||||
{}
|
||||
};
|
||||
|
||||
struct PP_Definition_FreeNode : public ParsedPacket {
|
||||
DefNodeId_t Id;
|
||||
|
||||
PP_Definition_FreeNode(DefNodeId_t id)
|
||||
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::FreeNode),
|
||||
Id(id)
|
||||
{}
|
||||
};
|
||||
|
||||
struct PP_Resource_InitResSend : public ParsedPacket {
|
||||
Hash_t Hash;
|
||||
BinaryResource Resource;
|
||||
@@ -327,16 +346,33 @@ void ServerSession::atFreeDrawTime(GlobalTime gTime, float dTime) {
|
||||
|
||||
} else if(pack->Level1 == ToClient::L1::Definition) {
|
||||
ToClient::L2Definition l2 = ToClient::L2Definition(pack->Level2);
|
||||
if(l2 == ToClient::L2Definition::Node) {
|
||||
|
||||
if(l2 == ToClient::L2Definition::Voxel) {
|
||||
PP_Definition_Voxel &p = *dynamic_cast<PP_Definition_Voxel*>(pack);
|
||||
Registry.DefVoxel[p.Id] = p.Def;
|
||||
onContentDefinesAdd[EnumDefContent::Voxel].push_back(p.Id);
|
||||
} else if(l2 == ToClient::L2Definition::FreeVoxel) {
|
||||
PP_Definition_FreeVoxel &p = *dynamic_cast<PP_Definition_FreeVoxel*>(pack);
|
||||
{
|
||||
auto iter = Registry.DefVoxel.find(p.Id);
|
||||
if(iter != Registry.DefVoxel.end())
|
||||
Registry.DefVoxel.erase(iter);
|
||||
}
|
||||
onContentDefinesLost[EnumDefContent::Voxel].push_back(p.Id);
|
||||
} else if(l2 == ToClient::L2Definition::Node) {
|
||||
PP_Definition_Node &p = *dynamic_cast<PP_Definition_Node*>(pack);
|
||||
Registry.DefNode[p.Id] = p.Def;
|
||||
onContentDefinesAdd[EnumDefContent::Node].push_back(p.Id);
|
||||
} else if(l2 == ToClient::L2Definition::FreeNode) {
|
||||
PP_Definition_FreeNode &p = *dynamic_cast<PP_Definition_FreeNode*>(pack);
|
||||
{
|
||||
auto iter = Registry.DefNode.find(p.Id);
|
||||
if(iter != Registry.DefNode.end())
|
||||
Registry.DefNode.erase(iter);
|
||||
}
|
||||
onContentDefinesLost[EnumDefContent::Node].push_back(p.Id);
|
||||
}
|
||||
|
||||
|
||||
} else if(pack->Level1 == ToClient::L1::Content) {
|
||||
ToClient::L2Content l2 = ToClient::L2Content(pack->Level2);
|
||||
if(l2 == ToClient::L2Content::ChunkVoxels) {
|
||||
|
||||
@@ -106,7 +106,7 @@ class VulkanRenderSession : public IRenderSession, public IVulkanDependent {
|
||||
|
||||
// Для отрисовки вокселей
|
||||
std::shared_ptr<ShaderModule> VoxelShaderVertex, VoxelShaderGeometry, VoxelShaderFragmentOpaque, VoxelShaderFragmentTransparent;
|
||||
VkPipeline
|
||||
VkPipeline
|
||||
VoxelOpaquePipeline = VK_NULL_HANDLE, // Альфа канал может быть либо 255, либо 0
|
||||
VoxelTransparentPipeline = VK_NULL_HANDLE; // Допускается полупрозрачность и смешивание
|
||||
|
||||
|
||||
Reference in New Issue
Block a user