HighMap library (C++)
Loading...
Searching...
No Matches
virtual_texture.hpp
Go to the documentation of this file.
1/* Copyright (c) 2025 Otto Link. Distributed under the terms of the GNU General
2 Public License. The full license is in the file LICENSE, distributed with
3 this software. */
4
10#pragma once
11#include <memory>
12#include <string>
13#include <vector>
14
15#include <glm/vec2.hpp>
16#include <glm/vec4.hpp>
17
18#include "highmap/colorize.hpp"
19#include "highmap/texture.hpp"
22
23namespace hmap
24{
25
27{
28public:
29 // --- Ctor
30
31 VirtualTexture() = default;
32
33 VirtualTexture(glm::ivec2 shape,
34 glm::vec4 bbox,
35 glm::ivec2 tile_shape,
36 int halo,
37 int channels,
38 std::unique_ptr<TileStorage> storage_proto);
39
40 VirtualTexture(glm::ivec2 shape,
41 glm::vec4 bbox,
42 glm::ivec2 tile_shape,
43 int halo,
44 int channels,
45 StorageMode storage_mode);
46
47 VirtualTexture(glm::ivec2 shape,
48 glm::ivec2 tile_shape,
49 int halo,
50 int channels,
51 StorageMode storage_mode);
52
53 // --- Copy
54
55 void copy_from(VirtualTexture &src, const ComputeMode &cm);
56
57 // --- Channels data
58
59 int channels() const;
60 VirtualArray &channel(int c);
61 const VirtualArray &channel(int c) const;
62 std::vector<VirtualArray *> channels_ptr();
63 std::vector<const VirtualArray *> channels_ptr() const;
64 std::vector<VirtualArray> &get_arrays();
65
66 void fill(float value, const ComputeMode &cm);
67 void fill(int c, float value, const ComputeMode &cm);
68
69 // --- Converters
70
71 void from_arrays(const std::vector<const Array *> &p_arrays,
72 const ComputeMode &cm);
73
74 std::vector<uint8_t> to_img_8bit(const glm::ivec2 &img_shape,
75 const ComputeMode &c,
76 bool flip_y = false) const;
77
78 void to_png(const glm::ivec2 &array_shape,
79 const std::string &fname,
80 const ComputeMode &cm,
81 int depth = CV_8U) const;
82
83 void to_png(const std::string &fname,
84 const ComputeMode &cm,
85 int depth = CV_8U) const;
86
87 std::vector<float> to_raw(const ComputeMode &cm, bool flip_y = false);
88
89 Texture to_texture(const glm::ivec2 &img_shape, const ComputeMode &cm) const;
90
91 void trim_storage() const;
92 size_t live_memory_bytes() const;
93
94 // --- Members
95
96 glm::ivec2 shape;
97 glm::vec4 bbox;
98 glm::ivec2 tile_shape;
99 int halo;
100
101private:
102 std::vector<VirtualArray> arrays;
103};
104
105// functions
106
108 int dst_channels,
109 float fill_value,
110 const ComputeMode &cm);
111
112// Forward declarations and imports for colorize / image operations on virtual
113// textures
114enum NormalMapBlendingMethod : int;
115enum Cmap : int;
116
133void colorize(VirtualTexture &out,
134 VirtualArray &level,
135 const ComputeMode &cm,
136 float vmin,
137 float vmax,
138 int cmap,
139 VirtualArray *p_alpha = nullptr,
140 bool reverse = false,
141 VirtualArray *p_noise = nullptr);
142
159void colorize(VirtualTexture &out,
160 VirtualArray &level,
161 const ComputeMode &cm,
162 float vmin,
163 float vmax,
164 const std::vector<float> &positions,
165 const std::vector<glm::vec3> &colormap_colors,
166 VirtualArray *p_alpha = nullptr,
167 bool reverse = false,
168 VirtualArray *p_noise = nullptr);
169
194 VirtualArray &a1,
195 VirtualArray &a2,
196 const ComputeMode &cm,
197 glm::vec2 range1,
198 glm::vec2 range2,
199 const std::vector<float> &positions1,
200 const std::vector<float> &positions2,
201 const std::vector<glm::vec3> &colormap_colors1,
202 const std::vector<glm::vec3> &colormap_colors2,
203 MixMethod method = MM_SQRT_AVG,
204 bool reverse1 = false,
205 bool reverse2 = false,
206 VirtualArray *p_noise1 = nullptr,
207 VirtualArray *p_noise2 = nullptr);
208
219void luminance(VirtualArray &out, VirtualTexture &tex, const ComputeMode &cm);
220
232void mix(VirtualTexture &out,
233 VirtualTexture &tex1,
234 VirtualTexture &tex2,
235 const ComputeMode &cm,
236 MixMethod method = MM_SQRT_AVG);
237
245void mix(VirtualTexture &out,
246 std::vector<VirtualTexture *> &texs,
247 const ComputeMode &cm,
248 MixMethod method = MM_SQRT_AVG);
249
261 VirtualTexture &nmap_base,
262 VirtualTexture &nmap_detail,
263 const ComputeMode &cm,
264 float detail_scaling,
265 NormalMapBlendingMethod blending_method);
266
267template <typename Func>
268void for_each_tile(VirtualTexture &tex, Func &&func, const ComputeMode &cm);
269
270template <typename Func>
271void for_each_pixel(VirtualTexture &tex, Func &&func, const ComputeMode &cm);
272
274
275} // namespace hmap
A class to represent a multi-channel texture using planar hmap::Array storage.
Definition texture.hpp:37
Definition virtual_texture.hpp:27
int halo
Definition virtual_texture.hpp:99
std::vector< uint8_t > to_img_8bit(const glm::ivec2 &img_shape, const ComputeMode &c, bool flip_y=false) const
Definition virtual_texture.cpp:160
void from_arrays(const std::vector< const Array * > &p_arrays, const ComputeMode &cm)
Definition virtual_texture.cpp:136
void copy_from(VirtualTexture &src, const ComputeMode &cm)
Definition virtual_texture.cpp:108
void fill(float value, const ComputeMode &cm)
Definition virtual_texture.cpp:123
std::vector< VirtualArray * > channels_ptr()
Definition virtual_texture.cpp:86
size_t live_memory_bytes() const
Definition virtual_texture.cpp:251
int channels() const
Definition virtual_texture.cpp:72
std::vector< float > to_raw(const ComputeMode &cm, bool flip_y=false)
Definition virtual_texture.cpp:200
glm::ivec2 tile_shape
Definition virtual_texture.hpp:98
VirtualTexture()=default
Texture to_texture(const glm::ivec2 &img_shape, const ComputeMode &cm) const
Definition virtual_texture.cpp:226
glm::vec4 bbox
Definition virtual_texture.hpp:97
void trim_storage() const
Definition virtual_texture.cpp:245
VirtualArray & channel(int c)
Definition virtual_texture.cpp:77
void to_png(const glm::ivec2 &array_shape, const std::string &fname, const ComputeMode &cm, int depth=CV_8U) const
Definition virtual_texture.cpp:176
glm::ivec2 shape
Definition virtual_texture.hpp:96
std::vector< VirtualArray > & get_arrays()
Definition virtual_texture.cpp:155
Header file for functions related to applying colorization and hillshading.
Definition algebra.hpp:23
Texture colorize_bivariate(const Array &a1, const Array &a2, const glm::vec2 range1, const glm::vec2 range2, const std::vector< float > &positions1, const std::vector< float > &positions2, const std::vector< glm::vec3 > &colormap_colors1, const std::vector< glm::vec3 > &colormap_colors2, MixMethod method=MM_SQRT_AVG, bool reverse1=false, bool reverse2=false, const Array *p_noise1=nullptr, const Array *p_noise2=nullptr)
Colorize two scalar fields into a Texture using two custom colormaps and a color mixing method.
Definition colorize.cpp:243
void for_each_tile(VirtualTexture &tex, Func &&func, const ComputeMode &cm)
Texture mix_normal_map(const Texture &nmap_base, const Texture &nmap_detail, float detail_scaling, NormalMapBlendingMethod blending_method)
Blend two normal maps into a single output normal map.
Definition colorize.cpp:714
void for_each_pixel(VirtualTexture &tex, Func &&func, const ComputeMode &cm)
Texture colorize(const Array &array, float vmin, float vmax, int cmap, bool hillshading, bool reverse=false, const Array *p_noise=nullptr)
Apply colorization to an array.
Definition colorize.cpp:108
NormalMapBlendingMethod
Definition colorize.hpp:51
Cmap
Enumeration for different colormap types.
Definition colormaps.hpp:83
StorageMode
Definition tile_storage.hpp:30
MixMethod
Methods for mixing/blending texture colors.
Definition colorize.hpp:44
@ MM_SQRT_AVG
Square-root average mixing.
Definition colorize.hpp:46
Texture mix(const Texture &tex1, const Texture &tex2, MixMethod method=MM_SQRT_AVG)
Mix two textures into an output texture.
Definition colorize.cpp:550
Array luminance(const Texture &tex)
Compute luminance from a Texture.
Definition colorize.cpp:544
VirtualTexture convert_texture_channels(const VirtualTexture &src, int dst_channels, float fill_value, const ComputeMode &cm)
Definition convert_texture_channels.cpp:18
Definition virtual_array.hpp:56
Definition virtual_array.hpp:68
Header file for the Texture class.