Cogs.Core
TerrainProviderFunctions.cpp
1#include "TerrainProviderFunctions.h"
2
3#include "../Source/JsonSerialization.h"
4
5#include "Context.h"
6#include "Resources/ResourceStore.h"
7#include "Services/Services.h"
8
9#include "Foundation/Logging/Logger.h"
10#include "Foundation/Platform/IO.h"
11
12
13namespace {
14 Cogs::Logging::Log logger = Cogs::Logging::getLogger("TerrainProvider");
15}
16
17Cogs::Core::TerrainProvider::IRasterSource::~IRasterSource()
18{
19}
20
21Cogs::Core::TerrainProvider::IRasterSource* Cogs::Core::TerrainProvider::open(Context* context, const char* path)
22{
23 ResourceQueryResult sourceLocation = context->resourceStore->getResourceLocation(path, ResourceStoreFlags::NoCachedContent);
24 std::string fullPath = sourceLocation.protocol == ResourceProtocol::File ? sourceLocation.path : path;
25 auto configFile = context->resourceStore->getResourceContents(fullPath);
26 if (!configFile.buffer) {
27 LOG_ERROR(logger, "Error reading %s", fullPath.c_str());
28 return nullptr;
29 }
30
31 LOG_DEBUG(logger, "Parsing %s", fullPath.c_str());
32 auto* rasterSource = deserialize(context, IO::parentPath(fullPath),
33 StringView((const char*)configFile.buffer->data(),
34 configFile.buffer->size()));
35 if (rasterSource == nullptr) {
36 LOG_ERROR(logger, "Error parsing %s", fullPath.c_str());
37 return nullptr;
38 }
39
41 if (!serializeConfig(buf, rasterSource)) {
42 LOG_ERROR(logger, "Failed to serialize rastersource");
43 }
44 //LOG_DEBUG(logger, "%.*s", (int)buf.size(), (const char*)buf.data());
45 return rasterSource;
46}
47
48Cogs::Core::TerrainProvider::MimeType Cogs::Core::TerrainProvider::parseMimeType(size_t textHash)
49{
50 switch (textHash) {
51 case Cogs::hash("image/png"):
52 case Cogs::hash("image/png32"):
53 return MimeType::Png;
54
55 case Cogs::hash("image/gif"):
56 return MimeType::Gif;
57
58 case Cogs::hash("image/jpeg"):
59 return MimeType::Jpeg;
60
61 case Cogs::hash("image/geotiff"):
62 case Cogs::hash("image/tiff"):
63 return MimeType::Tiff;
64
65 case Cogs::hash("image/raw-f32"):
66 return MimeType::Tiff;
67
68 case Cogs::hash("image/raw-rgba8"):
69 return MimeType::Tiff;
70
71 case Cogs::hash("application/xml"):
72 case Cogs::hash("text/xml"):
73 return MimeType::XML;
74
75 default:
76 return MimeType::None;
77 }
78}
79
80Cogs::Core::TerrainProvider::MimeType Cogs::Core::TerrainProvider::parseMimeType(StringView text)
81{
82 MimeType type = parseMimeType(text.hash());
83 if (type == MimeType::None) {
84 LOG_ERROR(logger, "Unrecognized mime type '%.*s'", StringViewFormat(text));
85 }
86 return type;
87}
88
89Cogs::Core::StringRef Cogs::Core::TerrainProvider::mimeTypeString(MimeType mimeType)
90{
91 switch (mimeType) {
92 case MimeType::None:
93 return NoString;
94
95 case MimeType::Png:
96 return Strings::add("image/png");
97
98 case MimeType::Gif:
99 return Strings::add("image/gif");
100
101 case MimeType::Jpeg:
102 return Strings::add("image/jpeg");
103
104 case MimeType::Tiff:
105 return Strings::add("image/geotiff");
106
107 case MimeType::F32:
108 return Strings::add("image/raw-f32");
109
110 case MimeType::RGBA8:
111 return Strings::add("image/raw-rgba8");
112
113 case MimeType::XML:
114 return Strings::add("text/xml");
115
116 default:
117 assert(false && "Illegal mime-type");
118 return NoString;
119 }
120}
Log implementation class.
Definition: LogManager.h:139
@ NoCachedContent
Never use cached data.
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:180
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.
Definition: HashFunctions.h:62