codex-5.2: Обработчик ресурсов на стороне клиента

This commit is contained in:
2026-01-04 20:11:14 +06:00
parent 7c54f429ba
commit 51cc68e1b2
11 changed files with 3614 additions and 2221 deletions

View File

@@ -1,5 +1,5 @@
#include "Abstract.hpp"
#include "Client/Vulkan/AtlasPipeline/TexturePipelineProgram.hpp"
#include "Common/TexturePipelineProgram.hpp"
#include "Common/Net.hpp"
#include "TOSLib.hpp"
#include <boost/interprocess/file_mapping.hpp>
@@ -783,7 +783,7 @@ void unCompressNodes_bit(const std::u8string& compressed, Node* ptr) {
}
}
void unCompressNodes(const std::u8string& compressed, Node* ptr) {
void unCompressNodes(std::u8string_view compressed, Node* ptr) {
const std::u8string& next = unCompressLinear(compressed);
const Node *lPtr = (const Node*) next.data();
std::copy(lPtr, lPtr+16*16*16, ptr);

View File

@@ -973,6 +973,57 @@ struct HeadlessModel {
std::u8string dump() const;
};
struct TexturePipeline {
std::vector<uint32_t> BinTextures;
std::vector<uint8_t> Pipeline;
bool operator==(const TexturePipeline& other) const {
return BinTextures == other.BinTextures && Pipeline == other.Pipeline;
}
};
struct PreparedModel {
struct SubModel {
std::string Domain;
std::string Key;
};
using Cuboid = HeadlessModel::Cuboid;
std::unordered_map<std::string, TexturePipeline> CompiledTextures;
std::vector<Cuboid> Cuboids;
std::vector<SubModel> SubModels;
PreparedModel() = default;
PreparedModel(const std::u8string& data) { load(data); }
PreparedModel(std::u8string_view data) { load(data); }
void load(std::u8string_view data) {
HeadlessModel model;
model.load(data);
Cuboids = model.Cuboids;
CompiledTextures.clear();
CompiledTextures.reserve(model.Textures.size());
for(const auto& [key, id] : model.Textures) {
TexturePipeline pipe;
pipe.BinTextures.push_back(id);
CompiledTextures.emplace(key, std::move(pipe));
}
}
};
struct PreparedNodeState : public HeadlessNodeState {
using HeadlessNodeState::Model;
using HeadlessNodeState::VectorModel;
std::vector<AssetsModel> LocalToModel;
PreparedNodeState() = default;
PreparedNodeState(std::u8string_view data) { load(data); }
PreparedNodeState(const std::u8string& data) { load(data); }
};
struct PreparedGLTF {
std::vector<std::string> TextureKey;
std::unordered_map<std::string, uint16_t> Textures;
@@ -1072,4 +1123,20 @@ struct hash<LV::Hash_t> {
return v;
}
};
template <>
struct hash<LV::TexturePipeline> {
std::size_t operator()(const LV::TexturePipeline& pipe) const noexcept {
std::size_t v = 14695981039346656037ULL;
for (uint32_t id : pipe.BinTextures) {
v ^= static_cast<std::size_t>(id);
v *= 1099511628211ULL;
}
for (uint8_t byte : pipe.Pipeline) {
v ^= static_cast<std::size_t>(byte);
v *= 1099511628211ULL;
}
return v;
}
};
}

View File

@@ -421,4 +421,11 @@ AssetsPreloader::Out_bakeId AssetsPreloader::bakeIdTables() {
return result;
}
std::tuple<AssetsNodestate, std::vector<AssetsModel>, std::vector<AssetsTexture>>
AssetsPreloader::getNodeDependency(const std::string& domain, const std::string& key) {
(void)domain;
(void)key;
return {0, {}, {}};
}
}

View File

@@ -14,7 +14,7 @@
#include <unordered_map>
#include <utility>
#include <vector>
#include "Client/Vulkan/AtlasPipeline/TexturePipelineProgram.hpp"
#include "Common/TexturePipelineProgram.hpp"
#include "Common/Abstract.hpp"
#include "Common/Async.hpp"
#include "TOSAsync.hpp"

File diff suppressed because it is too large Load Diff