diff --git a/dist/index-color-composite.html b/dist/index-color-composite.html
index e0aaa578..13cb86c6 100644
--- a/dist/index-color-composite.html
+++ b/dist/index-color-composite.html
@@ -53,23 +53,17 @@
@@ -205,12 +199,17 @@
diff --git a/src/core/img/colormaps/RdBu.png b/src/core/img/colormaps/RdBu.png
new file mode 100644
index 00000000..493e735f
Binary files /dev/null and b/src/core/img/colormaps/RdBu.png differ
diff --git a/src/core/img/colormaps/RdYiBu.png b/src/core/img/colormaps/RdYiBu.png
new file mode 100644
index 00000000..f6570584
Binary files /dev/null and b/src/core/img/colormaps/RdYiBu.png differ
diff --git a/src/core/img/colormaps/YIGnBu.png b/src/core/img/colormaps/YIGnBu.png
new file mode 100644
index 00000000..4011cb7a
Binary files /dev/null and b/src/core/img/colormaps/YIGnBu.png differ
diff --git a/src/core/img/colormaps/YIOrBr.png b/src/core/img/colormaps/YIOrBr.png
new file mode 100644
index 00000000..b6a9c282
Binary files /dev/null and b/src/core/img/colormaps/YIOrBr.png differ
diff --git a/src/core/img/colormaps/blackwhite.png b/src/core/img/colormaps/blackwhite.png
new file mode 100644
index 00000000..43938c29
Binary files /dev/null and b/src/core/img/colormaps/blackwhite.png differ
diff --git a/src/core/img/colormaps/blues.png b/src/core/img/colormaps/blues.png
new file mode 100644
index 00000000..b5e21885
Binary files /dev/null and b/src/core/img/colormaps/blues.png differ
diff --git a/src/core/img/colormaps/colormaps.png b/src/core/img/colormaps/colormaps.png
new file mode 100644
index 00000000..961fe167
Binary files /dev/null and b/src/core/img/colormaps/colormaps.png differ
diff --git a/src/core/img/colormaps/makecolormap.sh b/src/core/img/colormaps/makecolormap.sh
new file mode 100755
index 00000000..1340d16d
--- /dev/null
+++ b/src/core/img/colormaps/makecolormap.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+rm -rf colormaps.png
+
+for colormap_filename in `ls *.png | sort -V`; do
+ convert "$colormap_filename" -crop 256x1+0+0 +repage "$colormap_filename"s
+done
+
+convert -append *.pngs colormaps.png
+
+rm -rf *.pngs
diff --git a/src/core/img/parula.png b/src/core/img/colormaps/parula.png
similarity index 100%
rename from src/core/img/parula.png
rename to src/core/img/colormaps/parula.png
diff --git a/src/core/img/colormaps/rainbow.png b/src/core/img/colormaps/rainbow.png
new file mode 100644
index 00000000..761b93d6
Binary files /dev/null and b/src/core/img/colormaps/rainbow.png differ
diff --git a/src/core/img/colormaps/redtemperature.png b/src/core/img/colormaps/redtemperature.png
new file mode 100644
index 00000000..106b594e
Binary files /dev/null and b/src/core/img/colormaps/redtemperature.png differ
diff --git a/src/core/img/colormaps/spectral.png b/src/core/img/colormaps/spectral.png
new file mode 100644
index 00000000..a8c4b6e6
Binary files /dev/null and b/src/core/img/colormaps/spectral.png differ
diff --git a/src/core/img/colormaps/summer.png b/src/core/img/colormaps/summer.png
new file mode 100644
index 00000000..214a266c
Binary files /dev/null and b/src/core/img/colormaps/summer.png differ
diff --git a/src/core/src/app.rs b/src/core/src/app.rs
index 7f4e3fdf..cacc25fc 100644
--- a/src/core/src/app.rs
+++ b/src/core/src/app.rs
@@ -18,6 +18,7 @@ use crate::{
},
resources::Resources,
shader::ShaderManager,
+ shaders::Colormaps,
time::DeltaTime,
utils,
webgl_ctx::WebGl2Context,
@@ -71,6 +72,7 @@ pub struct App {
catalog_loaded: bool,
pub system: CooSystem,
+ pub colormaps: Colormaps,
}
use cgmath::{Vector2, Vector3};
@@ -175,7 +177,7 @@ impl App {
let downloader = TileDownloader::new();
// The surveys storing the textures of the resolved tiles
let surveys =
- ImageSurveys::new::(&gl, &camera, &mut shaders, &resources, &system);
+ ImageSurveys::new::(&gl, &camera, &mut shaders, &system);
//let color = sdss.color();
//let survey = sdss.create(&gl, &camera, &surveys, exec.clone())?;
@@ -202,6 +204,8 @@ impl App {
let out_of_fov = false;
let catalog_loaded = false;
+ let colormaps = Colormaps::new(&gl, &resources)?;
+
let app = App {
gl,
@@ -233,6 +237,8 @@ impl App {
tasks_finished,
catalog_loaded,
system,
+
+ colormaps
};
Ok(app)
@@ -520,12 +526,11 @@ impl App {
self.gl.clear(WebGl2RenderingContext::COLOR_BUFFER_BIT);
//self.gl.blend_func(WebGl2RenderingContext::SRC_ALPHA, WebGl2RenderingContext::ONE);
- self.surveys.draw::(&self.camera, &mut self.shaders);
+ self.surveys.draw:: (&self.camera, &mut self.shaders, &self.colormaps);
self.gl.enable(WebGl2RenderingContext::BLEND);
// Draw the catalog
- self.manager
- .draw:: (&self.gl, &mut self.shaders, &self.camera);
+ self.manager.draw:: (&self.gl, &mut self.shaders, &self.camera, &self.colormaps)?;
self.grid.draw:: (&self.camera, &mut self.shaders)?;
self.gl.disable(WebGl2RenderingContext::BLEND);
@@ -540,7 +545,7 @@ impl App {
pub fn set_image_surveys(&mut self, hipses: Vec) -> Result<(), JsValue> {
let new_survey_ids =
self.surveys
- .set_image_surveys(hipses, &self.gl, &self.camera, self.exec.clone())?;
+ .set_image_surveys(hipses, &self.gl, &self.camera, self.exec.clone(), &self.colormaps)?;
self.downloader.clear_requests();
if !new_survey_ids.is_empty() {
@@ -605,9 +610,9 @@ impl App {
pub fn add_catalog(&mut self, name: String, table: JsValue, colormap: String) {
let mut exec_ref = self.exec.borrow_mut();
let table = table;
- let colormap = Colormap::new(&self.gl, &self.resources, &colormap).unwrap();
+ let c = self.colormaps.get(&colormap);
- exec_ref.spawner().spawn(TaskType::ParseTable, async {
+ exec_ref.spawner().spawn(TaskType::ParseTable, async move {
let mut stream = ParseTable::<[f32; 2]>::new(table);
let mut results: Vec = vec![];
@@ -625,7 +630,7 @@ impl App {
TaskResult::TableParsed {
name,
sources: results,
- colormap,
+ colormap: c,
}
});
}
diff --git a/src/core/src/lib.rs b/src/core/src/lib.rs
index c59a1199..cc73347e 100644
--- a/src/core/src/lib.rs
+++ b/src/core/src/lib.rs
@@ -59,7 +59,7 @@ use crate::{
renderable::{image_survey::ImageSurveys, projection::Projection, Angle, ArcDeg},
resources::Resources,
shader::{Shader, ShaderManager},
- shaders::Colormap,
+ shaders::Colormaps,
time::DeltaTime,
webgl_ctx::WebGl2Context,
};
@@ -495,7 +495,7 @@ impl WebClient {
name_catalog: String,
colormap: String,
) -> Result<(), JsValue> {
- let colormap = Colormap::new(&self.app.gl, &self.app.resources, &name_catalog)?;
+ let colormap = self.app.colormaps.get(&colormap);
self.projection
.set_catalog_colormap(&mut self.app, name_catalog, colormap)?;
@@ -552,7 +552,7 @@ impl WebClient {
#[wasm_bindgen(js_name = getAvailableColormapList)]
pub fn get_available_colormap_list(&self) -> Result {
- let colormaps = Colormap::get_list_available_colormaps()
+ let colormaps = Colormaps::get_list_available_colormaps()
.iter()
.map(|s| s.to_string())
.collect::>();
diff --git a/src/core/src/renderable/catalog/manager.rs b/src/core/src/renderable/catalog/manager.rs
index 38457028..1972159f 100644
--- a/src/core/src/renderable/catalog/manager.rs
+++ b/src/core/src/renderable/catalog/manager.rs
@@ -120,7 +120,7 @@ impl Manager {
let indices: Vec = vec![0, 1, 2, 0, 2, 3];
let mut vao = VertexArrayObject::new(gl);
- let shader = Colormap::get_catalog_shader(gl, shaders);
+ let shader = Colormap::get_catalog_shader(gl, shaders)?;
shader
.bind(gl)
.bind_vertex_array_object(&mut vao)
@@ -244,10 +244,13 @@ impl Manager {
gl: &WebGl2Context,
shaders: &mut ShaderManager,
camera: &CameraViewPort,
- ) {
+ colormaps: &Colormaps
+ ) -> Result<(), JsValue> {
for catalog in self.catalogs.values() {
- catalog.draw::(&gl, shaders, self, camera);
+ catalog.draw:: (&gl, shaders, self, camera, colormaps)?;
}
+
+ Ok(())
}
}
@@ -271,7 +274,7 @@ const MAX_SOURCES_PER_CATALOG: f32 = 50000.0;
use crate::renderable::view_on_surveys::depth_from_pixels_on_screen;
use crate::renderable::{HEALPixCells, HEALPixCellsInView};
-
+use crate::shaders::Colormaps;
impl Catalog {
fn new(
gl: &WebGl2Context,
@@ -455,82 +458,87 @@ impl Catalog {
shaders: &mut ShaderManager,
manager: &Manager, // catalog manager
camera: &CameraViewPort,
- ) {
+ colormaps: &Colormaps,
+ ) -> Result<(), JsValue> {
// If the catalog is transparent, simply discard the draw
- if self.alpha == 0_f32 {
- return;
+ if self.alpha > 0_f32 {
+ // Render to the FRAMEBUFFER
+ gl.blend_func_separate(
+ WebGl2RenderingContext::SRC_ALPHA,
+ WebGl2RenderingContext::ONE,
+ WebGl2RenderingContext::ONE,
+ WebGl2RenderingContext::ONE,
+ );
+ {
+ // bind the FBO
+ gl.bind_framebuffer(WebGl2RenderingContext::FRAMEBUFFER, manager.fbo.as_ref());
+ let (fbo_width, fbo_height) = manager.fbo_texture.get_size();
+ // Set the camera
+ gl.viewport(0, 0, fbo_width as i32, fbo_height as i32);
+ gl.scissor(0, 0, fbo_width as i32, fbo_height as i32);
+
+ gl.clear_color(0.0, 0.0, 0.0, 1.0);
+ gl.clear(WebGl2RenderingContext::COLOR_BUFFER_BIT);
+
+ let shader = P::get_catalog_shader(gl, shaders);
+ let shader_bound = shader.bind(gl);
+
+ shader_bound
+ .attach_uniforms_from(camera)
+ // Attach catalog specialized uniforms
+ .attach_uniform("kernel_texture", &manager.kernel_texture) // Gaussian kernel texture
+ .attach_uniform("strength", &self.strength) // Strengh of the kernel
+ .attach_uniform("current_time", &utils::get_current_time())
+ .attach_uniform("kernel_size", &manager.kernel_size)
+ .attach_uniform("max_density", &self.max_density)
+ .bind_vertex_array_object_ref(&self.vertex_array_object_catalog)
+ .draw_elements_instanced_with_i32(
+ WebGl2RenderingContext::TRIANGLES,
+ 0,
+ self.num_instances,
+ );
+
+ // Unbind the FBO
+ gl.bind_framebuffer(WebGl2RenderingContext::FRAMEBUFFER, None);
+ }
+ //gl.disable(WebGl2RenderingContext::BLEND);
+ gl.blend_func_separate(
+ WebGl2RenderingContext::SRC_ALPHA,
+ WebGl2RenderingContext::ONE_MINUS_SRC_ALPHA,
+ WebGl2RenderingContext::ONE,
+ WebGl2RenderingContext::ONE,
+ );
+
+ // Render to the heatmap to the screen
+ {
+ // Set the camera
+ let size = camera.get_screen_size();
+ gl.viewport(0, 0, size.x as i32, size.y as i32);
+
+ let shader = shaders.get(
+ gl,
+ &ShaderId(
+ Cow::Borrowed("ColormapCatalogVS"),
+ Cow::Borrowed("ColormapCatalogFS"),
+ ),
+ )?;
+ //self.colormap.get_shader(gl, shaders);
+ shader.bind(gl)
+ .attach_uniform("texture_fbo", &manager.fbo_texture) // FBO density texture computed just above
+ .attach_uniform("alpha", &self.alpha) // Alpha channel
+ .attach_uniforms_from(&self.colormap)
+ .attach_uniforms_from(colormaps)
+ .attach_uniform("reversed", &false)
+ .bind_vertex_array_object_ref(&manager.vertex_array_object_screen)
+ .draw_elements_with_i32(
+ WebGl2RenderingContext::TRIANGLES,
+ None,
+ WebGl2RenderingContext::UNSIGNED_SHORT,
+ );
+ }
}
- // Render to the FRAMEBUFFER
- gl.blend_func_separate(
- WebGl2RenderingContext::SRC_ALPHA,
- WebGl2RenderingContext::ONE,
- WebGl2RenderingContext::ONE,
- WebGl2RenderingContext::ONE,
- );
- {
- // bind the FBO
- gl.bind_framebuffer(WebGl2RenderingContext::FRAMEBUFFER, manager.fbo.as_ref());
- let (fbo_width, fbo_height) = manager.fbo_texture.get_size();
- // Set the camera
- gl.viewport(0, 0, fbo_width as i32, fbo_height as i32);
- gl.scissor(0, 0, fbo_width as i32, fbo_height as i32);
- gl.clear_color(0.0, 0.0, 0.0, 1.0);
- gl.clear(WebGl2RenderingContext::COLOR_BUFFER_BIT);
-
- let shader = P::get_catalog_shader(gl, shaders);
- let shader_bound = shader.bind(gl);
-
- shader_bound
- .attach_uniforms_from(camera)
- // Attach catalog specialized uniforms
- .attach_uniform("kernel_texture", &manager.kernel_texture) // Gaussian kernel texture
- .attach_uniform("strength", &self.strength) // Strengh of the kernel
- .attach_uniform("current_time", &utils::get_current_time())
- .attach_uniform("kernel_size", &manager.kernel_size)
- .attach_uniform("max_density", &self.max_density)
- .bind_vertex_array_object_ref(&self.vertex_array_object_catalog)
- .draw_elements_instanced_with_i32(
- WebGl2RenderingContext::TRIANGLES,
- 0,
- self.num_instances,
- );
-
- // Unbind the FBO
- gl.bind_framebuffer(WebGl2RenderingContext::FRAMEBUFFER, None);
- }
- //gl.disable(WebGl2RenderingContext::BLEND);
- gl.blend_func_separate(
- WebGl2RenderingContext::SRC_ALPHA,
- WebGl2RenderingContext::ONE_MINUS_SRC_ALPHA,
- WebGl2RenderingContext::ONE,
- WebGl2RenderingContext::ONE,
- );
-
- // Render to the heatmap to the screen
- {
- // Set the camera
- let size = camera.get_screen_size();
- gl.viewport(0, 0, size.x as i32, size.y as i32);
-
- let shader = shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapCatalogVS"),
- Cow::Borrowed("ColormapCatalogFS"),
- ),
- ).unwrap();
- //self.colormap.get_shader(gl, shaders);
- shader.bind(gl)
- .attach_uniform("texture_fbo", &manager.fbo_texture) // FBO density texture computed just above
- .attach_uniform("alpha", &self.alpha) // Alpha channel
- .bind_vertex_array_object_ref(&manager.vertex_array_object_screen)
- .draw_elements_with_i32(
- WebGl2RenderingContext::TRIANGLES,
- None,
- WebGl2RenderingContext::UNSIGNED_SHORT,
- );
- }
+ Ok(())
}
}
pub trait CatalogShaderProjection {
diff --git a/src/core/src/renderable/image_survey.rs b/src/core/src/renderable/image_survey.rs
index a14de07d..430dceab 100644
--- a/src/core/src/renderable/image_survey.rs
+++ b/src/core/src/renderable/image_survey.rs
@@ -243,7 +243,7 @@ trait Draw {
color: &Color,
opacity: f32,
blank_pixel_color: &color::Color,
- colormap: &Colormap,
+ colormaps: &Colormaps,
);
}
@@ -271,7 +271,7 @@ impl SendUniforms for GrayscaleParameter {
pub enum Color {
Colored,
Grayscale2Colormap {
- colormap: Rc,
+ colormap: Colormap,
param: GrayscaleParameter,
reversed: bool,
},
@@ -346,7 +346,7 @@ impl SendUniforms for Color {
reversed,
} => {
shader
- .attach_uniforms_from(&**colormap)
+ .attach_uniforms_from(colormap)
.attach_uniforms_from(param)
.attach_uniform("reversed", reversed);
}
@@ -824,7 +824,7 @@ impl Draw for ImageSurvey {
color: &Color,
opacity: f32,
blank_pixel_color: &color::Color,
- colormap: &Colormap,
+ colormaps: &Colormaps,
) {
if !self.textures.is_ready() {
// Do not render while the 12 base cell textures
@@ -849,7 +849,8 @@ impl Draw for ImageSurvey {
.attach_uniform("blank_color", &blank_pixel_color)
.attach_uniform("current_depth", &(self.view.get_cells().get_depth() as i32))
.attach_uniform("current_time", &utils::get_current_time())
- .attach_uniform("opacity", &opacity);
+ .attach_uniform("opacity", &opacity)
+ .attach_uniforms_from(colormaps);
raytracer.draw(&shader);
@@ -894,7 +895,8 @@ impl Draw for ImageSurvey {
.attach_uniform("blank_color", &blank_pixel_color)
.attach_uniform("current_depth", &(self.view.get_cells().get_depth() as i32))
.attach_uniform("current_time", &utils::get_current_time())
- .attach_uniform("opacity", &opacity);
+ .attach_uniform("opacity", &opacity)
+ .attach_uniforms_from(colormaps);
// The raster vao is bound at the lib.rs level
self.gl.draw_elements_with_i32(
@@ -919,16 +921,15 @@ pub trait HiPS {
) -> Result;
fn color(
&self,
- colormap_tex: Rc
+ colormaps: &Colormaps
) -> Color;
}
use crate::{HiPSColor, SimpleHiPS};
use std::cell::RefCell;
use std::rc::Rc;
-use crate::core::Texture2D;
impl HiPS for SimpleHiPS {
- fn color(&self, colormap_tex: Rc) -> Color {
+ fn color(&self, colormaps: &Colormaps) -> Color {
let color = match self.color.clone() {
HiPSColor::Color => Color::Colored,
HiPSColor::Grayscale2Color { color, transfer, k } => Color::Grayscale2Color {
@@ -945,7 +946,7 @@ impl HiPS for SimpleHiPS {
transfer,
reversed,
} => Color::Grayscale2Colormap {
- colormap: colormap_tex,
+ colormap: colormaps.get(&colormap),
reversed,
param: GrayscaleParameter {
h: transfer.into(),
@@ -992,8 +993,6 @@ pub struct ImageSurveys {
raytracer: RayTracer,
gl: WebGl2Context,
-
- colormap: Rc,
}
use crate::buffer::Tiles;
@@ -1002,12 +1001,12 @@ use crate::buffer::{TileArrayBufferImage, TileHTMLImage};
use crate::coo_conversion::CooSystem;
use crate::Resources;
+use crate::shaders::Colormaps;
impl ImageSurveys {
pub fn new(
gl: &WebGl2Context,
camera: &CameraViewPort,
shaders: &mut ShaderManager,
- rs: &Resources,
system: &CooSystem,
) -> Self {
let surveys = HashMap::new();
@@ -1024,7 +1023,6 @@ impl ImageSurveys {
let ordered_layer_names = vec![];
- let colormap = Rc::new(Colormap::new(&gl, rs, "parula").unwrap());
ImageSurveys {
surveys,
ordered_layer_names,
@@ -1033,8 +1031,6 @@ impl ImageSurveys {
raytracer,
gl,
-
- colormap,
}
}
@@ -1094,7 +1090,7 @@ impl ImageSurveys {
}
}
- pub fn draw(&mut self, camera: &CameraViewPort, shaders: &mut ShaderManager) {
+ pub fn draw(&mut self, camera: &CameraViewPort, shaders: &mut ShaderManager, colormaps: &Colormaps) {
let raytracing = camera.get_aperture() > P::RASTER_THRESHOLD_ANGLE;
if raytracing {
@@ -1148,7 +1144,7 @@ impl ImageSurveys {
color,
*opacity,
&blank_pixel_color,
- &self.colormap,
+ &colormaps,
);
idx_survey += 1;
@@ -1171,6 +1167,7 @@ impl ImageSurveys {
gl: &WebGl2Context,
camera: &CameraViewPort,
exec: Rc>,
+ colormaps: &Colormaps,
) -> Result, JsValue> {
// Limit the number of HiPS received to 4
// The number of texture units accepted by the large majority of machine
@@ -1213,7 +1210,7 @@ impl ImageSurveys {
layer_name.clone(),
ImageSurveyLayer {
names: vec![url.clone()],
- colors: vec![hips.color(self.colormap.clone())],
+ colors: vec![hips.color(colormaps)],
opacity,
name_most_precised_survey: url.clone(),
},
@@ -1225,7 +1222,7 @@ impl ImageSurveys {
continue;
} else {
layer.names.push(url.clone());
- layer.colors.push(hips.color(self.colormap.clone()));
+ layer.colors.push(hips.color(&colormaps));
}
}
diff --git a/src/core/src/shader.rs b/src/core/src/shader.rs
index 345c7577..178cb3fd 100644
--- a/src/core/src/shader.rs
+++ b/src/core/src/shader.rs
@@ -341,6 +341,23 @@ pub enum Error {
FileNotFound { message: String },
}
+use wasm_bindgen::JsValue;
+impl From for JsValue {
+ fn from(e: Error) -> Self {
+ match e {
+ Error::ShaderAlreadyInserted { message } => {
+ JsValue::from_str(&format!("Shader already inserted: {:?}", message))
+ },
+ Error::ShaderNotFound { message } => {
+ JsValue::from_str(&format!("Shader not found: {:?}", message))
+ },
+ Error::FileNotFound { message } => {
+ JsValue::from_str(&format!("Shader not found: {:?}", message))
+ },
+ }
+ }
+}
+
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct FileSrc {
diff --git a/src/core/src/shaders/colormaps/colormap.glsl b/src/core/src/shaders/colormaps/colormap.glsl
index 6d4b318d..039d75ab 100644
--- a/src/core/src/shaders/colormaps/colormap.glsl
+++ b/src/core/src/shaders/colormaps/colormap.glsl
@@ -1,983 +1,12 @@
-/*// Blue & Pastel & Red
-float colormap_red(float x) {
- if (x < 0.1131206452846527) {
- return (-9.40943766883858E+02 * x - 1.84146720562529E+02) * x + 3.28713709677420E+01;
- } else if (x < 0.5116005837917328) {
- return 0.0;
- } else if (x < 0.5705677568912506) {
- return (-2.22507913165263E+03 * x + 2.76053354341733E+03) * x - 8.29909138655453E+02;
- } else if (x < 0.622047244) {
- return (-1.84774532967032E+04 * x + 2.30647002747253E+04) * x - 7.12389120879120E+03;
- } else if (x < 0.7922459542751312) {
- return ((((1.29456468589020E+06 * x - 4.64095889653844E+06) * x + 6.62951004830418E+06) * x - 4.71587036142377E+06) * x + 1.67048886368434E+06) * x - 2.35682532934682E+05;
- } else {
- return 3.34889230769210E+02 * x - 1.41006123680226E+02;
- }
-}
-
-float colormap_green(float x) {
- if (x < 0.114394336938858) {
- return 0.0;
- } else if (x < 0.4417250454425812) {
- return (9.43393359191585E+02 * x + 1.86774918014536E+02) * x - 3.37113020096108E+01;
- } else if (x < 0.4964917968308496) {
- return 3.11150000000070E+02 * x + 9.54249999999731E+01;
- } else if (x < 0.6259051214039278) {
- return -1.03272635599706E+03 * x + 7.62648586707481E+02;
- } else if (x < 0.8049814403057098) {
- return -2.92799028677160E+02 * x + 2.99524283071235E+02;
- } else {
- return (1.34145201311283E+03 * x - 2.75066701126586E+03) * x + 1.40880802982723E+03;
- }
-}
-
-float colormap_blue(float x) {
- if (x < 0.4424893036638088) {
- return 3.09636968527514E+02 * x + 9.62203074056821E+01;
- } else if (x < 0.5) {
- return -4.59921428571535E+02 * x + 4.36741666666678E+02;
- } else if (x < 0.5691165986930345) {
- return -1.81364912280674E+03 * x + 1.05392982456125E+03;
- } else if (x < 0.6279306709766388) {
- return 1.83776470588197E+02 * x - 8.28382352940910E+01;
- } else {
- return ((-1.14087926835422E+04 * x + 2.47091243363548E+04) * x - 1.80428756181930E+04) * x + 4.44421976986281E+03;
- }
-}
-
-vec4 bluepastelred_f(float x) {
- float r = clamp(colormap_red(x) / 255.0, 0.0, 1.0);
- float g = clamp(colormap_green(x) / 255.0, 0.0, 1.0);
- float b = clamp(colormap_blue(x) / 255.0, 0.0, 1.0);
- return vec4(r, g, b, 1.0);
-}
-
-// Red
-float c_red(float x) {
- return 1.448953446096850 * x - 5.02253539008443e-1;
-}
-
-float c_green(float x) {
- return 1.889376646180860 * x - 2.272028094820020e2;
-}
-
-float c_blue(float x) {
- return 3.92613636363636 * x - 7.46528409090909e+2;
-}
-
-vec4 red_f(float x) {
- float t = x * 255.0;
- float r = clamp(c_red(t) / 255.0, 0.0, 1.0);
- float g = clamp(c_green(t) / 255.0, 0.0, 1.0);
- float b = clamp(c_blue(t) / 255.0, 0.0, 1.0);
-
- return vec4(r, g, b, 1.0);
-}
-// Gray
-vec4 blackw_f(float x) {
- float d = clamp(x, 0.0, 1.0);
- return vec4(d, d, d, 1.0);
-}
-// IDLCBGnBu
-float cbgnbu_red(float x) {
- float v = ((((-2.83671754639782E+03 * x + 6.51753994553536E+03) * x - 5.00110948171466E+03) * x + 1.30359712298773E+03) * x - 2.89958300810074E+02) * x + 2.48458039402758E+02;
- if (v < 8.0) {
- return 8.0;
- } else {
- return v;
- }
-}
-
-float cbgnbu_green(float x) {
- return (((((-1.36304822155833E+03 * x + 4.37691418182849E+03) * x - 5.01802019417285E+03) * x + 2.39971481269598E+03) * x - 5.65401491984724E+02) * x - 1.48189675724133E+01) * x + 2.50507618187374E+02;
-}
-
-float cbgnbu_blue(float x) {
- if (x < 0.3756393599187693) {
- return (9.62948273917718E+01 * x - 1.96136874142438E+02) * x + 2.41033490809633E+02;
- } else if (x < 0.6215448666633865) {
- return 1.21184043778803E+02 * x + 1.35422939068100E+02;
- } else if (x < 0.8830064316178203) {
- return -1.53052165744713E+02 * x + 3.05873047350666E+02;
- } else {
- return -3.49468965517114E+02 * x + 4.79310344827486E+02;
- }
-}
-
-vec4 cbgnbu_f(float x) {
- float r = clamp(cbgnbu_red(x) / 255.0, 0.0, 1.0);
- float g = clamp(cbgnbu_green(x) / 255.0, 0.0, 1.0);
- float b = clamp(cbgnbu_blue(x) / 255.0, 0.0, 1.0);
- return vec4(r, g, b, 1.0);
-}
-// IDLCBYIGnBu
-float CBYIGnBu_red(float x) {
- if (x < 0.2523055374622345) {
- return (-5.80630393656902E+02 * x - 8.20261301968494E+01) * x + 2.53829637096771E+02;
- } else if (x < 0.6267540156841278) {
- return (((-4.07958939010649E+03 * x + 8.13296992114899E+03) * x - 5.30725139102868E+03) * x + 8.58474724851723E+02) * x + 2.03329669375107E+02;
- } else if (x < 0.8763731146612115) {
- return 3.28717357910916E+01 * x + 8.82117255504255E+00;
- } else {
- return -2.29186583577707E+02 * x + 2.38482038123159E+02;
- }
-}
-
-float CBYIGnBu_green(float x) {
- if (x < 0.4578040540218353) {
- return ((4.49001704856054E+02 * x - 5.56217473429394E+02) * x + 2.09812296466262E+01) * x + 2.52987561849833E+02;
- } else {
- return ((1.28031059709139E+03 * x - 2.71007279113343E+03) * x + 1.52699334501816E+03) * x - 6.48190622715140E+01;
- }
-}
-
-float CBYIGnBu_blue(float x) {
- if (x < 0.1239372193813324) {
- return (1.10092779856059E+02 * x - 3.41564374557536E+02) * x + 2.17553885630496E+02;
- } else if (x < 0.7535201013088226) {
- return ((((3.86204601547122E+03 * x - 8.79126469446648E+03) * x + 6.80922226393264E+03) * x - 2.24007302003438E+03) * x + 3.51344388740066E+02) * x + 1.56774650431396E+02;
- } else {
- return (((((-7.46693234167480E+06 * x + 3.93327773566702E+07) * x - 8.61050867447971E+07) * x + 1.00269040461745E+08) * x - 6.55080846112976E+07) * x + 2.27664953009389E+07) * x - 3.28811994253461E+06;
- }
-}
-
-vec4 CBYIGnBu_f(float x) {
- float r = clamp(CBYIGnBu_red(x) / 255.0, 0.0, 1.0);
- float g = clamp(CBYIGnBu_green(x) / 255.0, 0.0, 1.0);
- float b = clamp(CBYIGnBu_blue(x) / 255.0, 0.0, 1.0);
- return vec4(r, g, b, 1.0);
-}
-// IDLCBBrBG
-float cbbrbg_red(float x) {
- if (x < 0.4128910005092621) {
- return (-6.30796693758704E+02 * x + 6.59139629181867E+02) * x + 8.16592339699109E+01;
- } else if (x < 0.5004365747118258) {
- return -1.99292307692284E+01 * x + 2.54503076923075E+02;
- } else if (x < 0.6000321805477142) {
- return -4.46903540903651E+02 * x + 4.68176638176691E+02;
- } else {
- return ((2.43537534073204E+03 * x - 5.03831150657605E+03) * x + 2.73595321475367E+03) * x - 1.53778856560153E+02;
- }
-}
-
-float cbbrbg_green(float x) {
- if (x < 0.3067105114459991) {
- return (((((-1.43558931121826E+06 * x + 1.21789289489746E+06) * x - 3.88754308517456E+05) * x + 5.87745165729522E+04) * x - 3.61237992835044E+03) * x + 4.00139210969209E+02) * x + 4.80612502318691E+01;
- } else if (x < 0.4045854562297116) {
- return 3.64978461538455E+02 * x + 8.50984615384636E+01;
- } else if (x < 0.5035906732082367) {
- return 1.25827692307720E+02 * x + 1.81855384615367E+02;
- } else {
- return ((((-2.83948052403926E+04 * x + 1.08768529946603E+05) * x - 1.62569302478295E+05) * x + 1.17919256227845E+05) * x - 4.16776268978779E+04) * x + 6.01529271177582E+03;
- }
-}
-
-float cbbrbg_blue(float x) {
- if (x < 0.1012683545126085) {
- return 5.85993431855501E+01 * x + 4.56403940886700E+00;
- } else if (x < 0.2050940692424774) {
- return 3.51072173913048E+02 * x - 2.50542028985514E+01;
- } else if (x < 0.5022056996822357) {
- return (-7.65121475963620E+02 * x + 1.20827362856208E+03) * x - 1.68677387505814E+02;
- } else if (x < 0.5970333516597748) {
- return -1.62299487179500E+02 * x + 3.26660512820525E+02;
- } else {
- return ((1.27993125066091E+03 * x - 3.19799978871341E+03) * x + 2.16242391471484E+03) * x - 1.93738146367890E+02;
- }
-}
-
-vec4 cbbrbg_f(float x) {
- float r = clamp(cbbrbg_red(x) / 255.0, 0.0, 1.0);
- float g = clamp(cbbrbg_green(x) / 255.0, 0.0, 1.0);
- float b = clamp(cbbrbg_blue(x) / 255.0, 0.0, 1.0);
- return vec4(r, g, b, 1.0);
-}
-
-// source: https://www.shadertoy.com/view/WlfXRN
-vec4 viridis_f(float x) {
- const vec4 c0 = vec4(0.2777273272234177, 0.005407344544966578, 0.3340998053353061, 1.0);
- const vec4 c1 = vec4(0.1050930431085774, 1.404613529898575, 1.384590162594685, 1.0);
- const vec4 c2 = vec4(-0.3308618287255563, 0.214847559468213, 0.09509516302823659, 1.0);
- const vec4 c3 = vec4(-4.634230498983486, -5.799100973351585, -19.33244095627987, 1.0);
- const vec4 c4 = vec4(6.228269936347081, 14.17993336680509, 56.69055260068105, 1.0);
- vec4 c5 = vec4(4.776384997670288, -13.74514537774601, -65.35303263337234, 1.0);
- const vec4 c6 = vec4(-5.435455855934631, 4.645852612178535, 26.3124352495832, 1.0);
-
- return c0 + x*(c1+x*(c2+x*(c3+x*(c4+x*(c5+x*c6)))));
-}
-
-// source: https://www.shadertoy.com/view/3lBXR3
-vec4 plasma_f(float x) {
- const vec4 c0 = vec4(0.05873234392399702, 0.02333670892565664, 0.5433401826748754, 1.0);
- const vec4 c1 = vec4(2.176514634195958, 0.2383834171260182, 0.7539604599784036, 1.0);
- const vec4 c2 = vec4(-2.689460476458034, -7.455851135738909, 3.110799939717086, 1.0);
- const vec4 c3 = vec4(6.130348345893603, 42.3461881477227, -28.51885465332158, 1.0);
- const vec4 c4 = vec4(-11.10743619062271, -82.66631109428045, 60.13984767418263, 1.0);
- const vec4 c5 = vec4(10.02306557647065, 71.41361770095349, -54.07218655560067, 1.0);
- const vec4 c6 = vec4(-3.658713842777788, -22.93153465461149, 18.19190778539828, 1.0);
-
- return c0+x*(c1+x*(c2+x*(c3+x*(c4+x*(c5+x*c6)))));
-}
-
-// source: https://www.shadertoy.com/view/3lBXR3
-vec4 magma_f(float x) {
- const vec4 c0 = vec4(-0.002136485053939582, -0.000749655052795221, -0.005386127855323933, 1.0);
- const vec4 c1 = vec4(0.2516605407371642, 0.6775232436837668, 2.494026599312351, 1.0);
- const vec4 c2 = vec4(8.353717279216625, -3.577719514958484, 0.3144679030132573, 1.0);
- const vec4 c3 = vec4(-27.66873308576866, 14.26473078096533, -13.64921318813922, 1.0);
- const vec4 c4 = vec4(52.17613981234068, -27.94360607168351, 12.94416944238394, 1.0);
- const vec4 c5 = vec4(-50.76852536473588, 29.04658282127291, 4.23415299384598, 1.0);
- const vec4 c6 = vec4(18.65570506591883, -11.48977351997711, -5.601961508734096, 1.0);
-
- return c0+x*(c1+x*(c2+x*(c3+x*(c4+x*(c5+x*c6)))));
-}
-
-// source: https://www.shadertoy.com/view/3lBXR3
-vec4 inferno_f(float x) {
- const vec4 c0 = vec4(0.0002189403691192265, 0.001651004631001012, -0.01948089843709184, 1.0);
- const vec4 c1 = vec4(0.1065134194856116, 0.5639564367884091, 3.932712388889277, 1.0);
- const vec4 c2 = vec4(11.60249308247187, -3.972853965665698, -15.9423941062914, 1.0);
- const vec4 c3 = vec4(-41.70399613139459, 17.43639888205313, 44.35414519872813, 1.0);
- const vec4 c4 = vec4(77.162935699427, -33.40235894210092, -81.80730925738993, 1.0);
- const vec4 c5 = vec4(-71.31942824499214, 32.62606426397723, 73.20951985803202, 1.0);
- const vec4 c6 = vec4(25.13112622477341, -12.24266895238567, -23.07032500287172, 1.0);
-
- return c0+x*(c1+x*(c2+x*(c3+x*(c4+x*(c5+x*c6)))));
-}
-
-// source: https://www.shadertoy.com/view/3lBXR3
-vec4 turbo_f(float x) {
- const vec4 c0 = vec4(0.1140890109226559, 0.06288340699912215, 0.2248337216805064, 1.0);
- const vec4 c1 = vec4(6.716419496985708, 3.182286745507602, 7.571581586103393, 1.0);
- const vec4 c2 = vec4(-66.09402360453038, -4.9279827041226, -10.09439367561635, 1.0);
- const vec4 c3 = vec4(228.7660791526501, 25.04986699771073, -91.54105330182436, 1.0);
- const vec4 c4 = vec4(-334.8351565777451, -69.31749712757485, 288.5858850615712, 1.0);
- const vec4 c5 = vec4(218.7637218434795, 67.52150567819112, -305.2045772184957, 1.0);
- const vec4 c6 = vec4(-52.88903478218835, -21.54527364654712, 110.5174647748972, 1.0);
-
- return c0+x*(c1+x*(c2+x*(c3+x*(c4+x*(c5+x*c6)))));
-}
-
-
-vec4 YIOrBr_f(float x) {
- float r = ((((1.30858855846896E+03 * x - 2.84649723684787E+03) * x + 1.76048857883363E+03) * x - 3.99775093706324E+02) * x + 2.69759225316811E+01) * x + 2.54587325383574E+02;
- float g = ((((-8.85605750526301E+02 * x + 2.20590941129997E+03) * x - 1.50123293069936E+03) * x + 2.38490009587258E+01) * x - 6.03460495073813E+01) * x + 2.54768707485247E+02;
- float b = 0.0f;
-
- if (x < 0.2363454401493073) {
- b = (-3.68734834041388E+01 * x - 3.28163398692792E+02) * x + 2.27342862588147E+02;
- } else if (x < 0.7571054399013519) {
- b = ((((1.60988309475108E+04 * x - 4.18782706486673E+04) * x + 4.14508040221340E+04) * x - 1.88926043556059E+04) * x + 3.50108270140290E+03) * x - 5.28541997751406E+01;
- } else {
- b = 1.68513761929930E+01 * x - 1.06424668227935E+01;
- }
-
- r = clamp(r / 255.0, 0.0, 1.0);
- g = clamp(g / 255.0, 0.0, 1.0);
- b = clamp(b / 255.0, 0.0, 1.0);
-
- return vec4(r, g, b, 1.0);
-}
-
-vec4 stern_f(float x) {
- float t = x * 255.0;
-
- float red;
- if (t < (3.27037346938775E+02 + 9.33750000000000E+00) / (1.81250000000000E+01 + 5.18306122448980E+00)) { // 14.0428817217
- red = 1.81250000000000E+01 * t - 9.33750000000000E+00;
- } else if (t <= 64.0) {
- red = -5.18306122448980E+00 * t + 3.27037346938775E+02;
- } else {
- red = t;
- }
-
- float blue;
- if (t < (8.01533134203946E+02 + 1.96917113893858E+00) / (1.99964221824687E+00 + 4.25020839121978E+00)) { // 128.063441841
- blue = 1.99964221824687E+00 * t - 1.96917113893858E+00;
- } else if (t < (8.01533134203946E+02 + 7.17997825045893E+02) / (3.80632931598691E+00 + 4.25020839121978E+00)) {
- blue = -4.25020839121978E+00 * t + 8.01533134203946E+02;
- } else {
- blue = 3.80632931598691E+00 * t - 7.17997825045893E+02;
- }
-
- red = clamp(red / 255.0, 0.0, 1.0);
- blue = clamp(blue / 255.0, 0.0, 1.0);
-
- return vec4(red, x, blue, 1.0);
-}
-
-vec4 colormap_hsv2rgb(float h, float s, float v) {
- float r = v;
- float g = v;
- float b = v;
- if (s > 0.0) {
- h *= 6.0;
- int i = int(h);
- float f = h - float(i);
- if (i == 1) {
- r *= 1.0 - s * f;
- b *= 1.0 - s;
- } else if (i == 2) {
- r *= 1.0 - s;
- b *= 1.0 - s * (1.0 - f);
- } else if (i == 3) {
- r *= 1.0 - s;
- g *= 1.0 - s * f;
- } else if (i == 4) {
- r *= 1.0 - s * (1.0 - f);
- g *= 1.0 - s;
- } else if (i == 5) {
- g *= 1.0 - s;
- b *= 1.0 - s * f;
- } else {
- g *= 1.0 - s * (1.0 - f);
- b *= 1.0 - s;
- }
- }
- return vec4(r, g, b, 1.0);
-}
-
-
-
-vec4 EOSB_f(float x) {
- x = clamp(x, 0.0, 1.0);
-
- float h;
- if (x < 0.1167535483837128) {
- h = 2.0 / 3.0; // H1
- } else if (x < 0.1767823398113251) {
- h = ((-3.19659402385354E+02 * x + 1.14469539590179E+02) * x - 1.52210982227697E+01) * x + 1.39214703883044E+00; // H2
- } else if (x < 0.2266354262828827) {
- h = ((-3.55166097640991E+02 * x + 2.51218596935272E+02) * x - 6.08853752315044E+01) * x + 5.38727123476564E+00; // H3
- } else if (x < (6.95053970124612E-01 - 4.13725796136428E-01) / (1.48914458632691E+00 - 6.97458630656247E-01)) {
- h = -1.48914458632691E+00 * x + 6.95053970124612E-01; // H4
- } else if (x < (4.13725796136428E-01 - 2.48329223043123E-01) / (6.97458630656247E-01 - 3.48617475202321E-01)) {
- h = -6.97458630656247E-01 * x + 4.13725796136428E-01; // H5
- } else {
- h = -3.48617475202321E-01 * x + 2.48329223043123E-01; // H6
- }
-
- float s = 1.0;
-
- float v = 1.0;
- if (x < 0.115834504365921) {
- v = 4.18575376272140E+00 * x + 5.15145240089963E-01; // V1-Hi
- } else if (x < (1.90980360972022E+00 + 9.13724751363001E-01) / (7.87450639585523E+00 + 7.87450803534638E+00)) {
- v = -7.87450803534638E+00 * x + 1.90980360972022E+00; // V2-Hi
- } else if (x < 0.5) {
- v = 7.87450639585523E+00 * x - 9.13724751363001E-01; // V3-Hi
- } else {
- v = -1.87540494049556E+00 * x + 2.33603077812338E+00; // V4-Hi
- }
- v = clamp(v, 0.0, 1.0);
-
- float period = 4.0 / 105.0;
- float len = 3.0 / 252.0;
- float t = mod(x + 7.0 / 252.0, period);
- if (0.0 <= t && t < len) {
- if (x < 0.115834504365921) {
- v = 3.74113124408467E+00 * x + 4.64654322955584E-01; // V1-Lo
- } else if (x < (1.90980360972022E+00 + 9.13724751363001E-01) / (7.87450639585523E+00 + 7.87450803534638E+00)) {
- v = -3.97326878048783E+00 * x + 1.25308500609757E+00; // V2-Lo
- } else if (x < 0.25) {
- v = 6.99297032967038E+00 * x - 8.03946549450558E-01; // V3-Lo
- } else if (x < 0.72) {
- v -= 26.0 / 255.0;
- } else {
- v = -1.67870020621040E+00 * x + 2.09414636280895E+00; // V4-Lo
- }
- }
-
- return colormap_hsv2rgb(h, s, v);
-}
-
-vec4 spectral_f(float x) {
- float r, g, b;
-
- if (x < 0.09752005946586478) {
- r = 5.63203907203907E+02 * x + 1.57952380952381E+02;
- } else if (x < 0.2005235116443438) {
- r = 3.02650769230760E+02 * x + 1.83361538461540E+02;
- } else if (x < 0.2974133397506856) {
- r = 9.21045429665647E+01 * x + 2.25581007115501E+02;
- } else if (x < 0.5003919130598823) {
- r = 9.84288115246108E+00 * x + 2.50046722689075E+02;
- } else if (x < 0.5989021956920624) {
- r = -2.48619704433547E+02 * x + 3.79379310344861E+02;
- } else if (x < 0.902860552072525) {
- r = ((2.76764884219295E+03 * x - 6.08393126459837E+03) * x + 3.80008072407485E+03) * x - 4.57725185424742E+02;
- } else {
- r = 4.27603478260530E+02 * x - 3.35293188405479E+02;
- }
-
- if (x < 0.09785836420571035) {
- g = 6.23754529914529E+02 * x + 7.26495726495790E-01;
- } else if (x < 0.2034012006283468) {
- g = 4.60453201970444E+02 * x + 1.67068965517242E+01;
- } else if (x < 0.302409765476316) {
- g = 6.61789401709441E+02 * x - 2.42451282051364E+01;
- } else if (x < 0.4005965758690823) {
- g = 4.82379130434784E+02 * x + 3.00102898550747E+01;
- } else if (x < 0.4981907026473237) {
- g = 3.24710622710631E+02 * x + 9.31717541717582E+01;
- } else if (x < 0.6064345916502067) {
- g = -9.64699507389807E+01 * x + 3.03000000000023E+02;
- } else if (x < 0.7987472620841592) {
- g = -2.54022986425337E+02 * x + 3.98545610859729E+02;
- } else {
- g = -5.71281628959223E+02 * x + 6.51955082956207E+02;
- }
-
- if (x < 0.0997359608740309) {
- b = 1.26522393162393E+02 * x + 6.65042735042735E+01;
- } else if (x < 0.1983790695667267) {
- b = -1.22037851037851E+02 * x + 9.12946682946686E+01;
- } else if (x < 0.4997643530368805) {
- b = (5.39336225400169E+02 * x + 3.55461986381562E+01) * x + 3.88081126069087E+01;
- } else if (x < 0.6025972254407099) {
- b = -3.79294261294313E+02 * x + 3.80837606837633E+02;
- } else if (x < 0.6990141388105746) {
- b = 1.15990231990252E+02 * x + 8.23805453805459E+01;
- } else if (x < 0.8032653181119567) {
- b = 1.68464957265204E+01 * x + 1.51683418803401E+02;
- } else if (x < 0.9035796343050095) {
- b = 2.40199023199020E+02 * x - 2.77279202279061E+01;
- } else {
- b = -2.78813846153774E+02 * x + 4.41241538461485E+02;
- }
-
- r = clamp(r / 255.0, 0.0, 1.0);
- g = clamp(g / 255.0, 0.0, 1.0);
- b = clamp(b / 255.0, 0.0, 1.0);
-
- return vec4(r, g, b, 1.0);
-}
-
-vec4 RdBu_f(float x) {
- float r, g, b;
-
- if (x < 0.09771832105856419) {
- r = 7.60263247863246E+02 * x + 1.02931623931624E+02;
- } else if (x < 0.3017162107441106) {
- r = (-2.54380938558548E+02 * x + 4.29911571188803E+02) * x + 1.37642085716717E+02;
- } else if (x < 0.4014205790737471) {
- r = 8.67103448276151E+01 * x + 2.18034482758611E+02;
- } else if (x < 0.5019932233215039) {
- r = -6.15461538461498E+01 * x + 2.77547692307680E+02;
- } else if (x < 0.5969483882550937) {
- r = -3.77588522588624E+02 * x + 4.36198819698878E+02;
- } else if (x < 0.8046060096654594) {
- r = (-6.51345897546620E+02 * x + 2.09780968434337E+02) * x + 3.17674951640855E+02;
- } else {
- r = -3.08431855203590E+02 * x + 3.12956742081421E+02;
- }
-
- if (x < 0.09881640500975222) {
- g = 2.41408547008547E+02 * x + 3.50427350427364E-01;
- } else if (x < 0.5000816285610199) {
- g = ((((1.98531871433258E+04 * x - 2.64108262469187E+04) * x + 1.10991785969817E+04) * x - 1.92958444776211E+03) * x + 8.39569642882186E+02) * x - 4.82944517518776E+01;
- } else if (x < 0.8922355473041534) {
- g = (((6.16712686949223E+03 * x - 1.59084026055125E+04) * x + 1.45172137257997E+04) * x - 5.80944127411621E+03) * x + 1.12477959061948E+03;
- } else {
- g = -5.28313797313699E+02 * x + 5.78459299959206E+02;
- }
-
- if (x < 0.1033699568661857) {
- b = 1.30256410256410E+02 * x + 3.08518518518519E+01;
- } else if (x < 0.2037526071071625) {
- b = 3.38458128078815E+02 * x + 9.33004926108412E+00;
- } else if (x < 0.2973267734050751) {
- b = (-1.06345054944861E+02 * x + 5.93327252747168E+02) * x - 3.81852747252658E+01;
- } else if (x < 0.4029109179973602) {
- b = 6.68959706959723E+02 * x - 7.00740740740798E+01;
- } else if (x < 0.5006715489526758) {
- b = 4.87348695652202E+02 * x + 3.09898550724286E+00;
- } else if (x < 0.6004396902588283) {
- b = -6.85799999999829E+01 * x + 2.81436666666663E+02;
- } else if (x < 0.702576607465744) {
- b = -1.81331701891043E+02 * x + 3.49137263626287E+02;
- } else if (x < 0.9010407030582428) {
- b = (2.06124143164576E+02 * x - 5.78166906665595E+02) * x + 5.26198653917172E+02;
- } else {
- b = -7.36990769230737E+02 * x + 8.36652307692262E+02;
- }
-
- r = clamp(r / 255.0, 0.0, 1.0);
- g = clamp(g / 255.0, 0.0, 1.0);
- b = clamp(b / 255.0, 0.0, 1.0);
-
- return vec4(r, g, b, 1.0);
-}
-
-vec4 parula_f(float x) {
- if (x < 0.0) {
- return vec4(0.0, 0.0, 0.0, 0.0);
- } else if (1.0 < x) {
- return vec4(0.0, 0.0, 0.0, 0.0);
- }
- if (x < 3.1250000000000000e-02) {
- float dx = x - 1.5625000000000000e-02;
- return ((vec4(-1.4151576683620706e+02, 2.4271369358056621e+01, 4.5510373586485706e+01, 1.0) * dx
- + vec4( 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0)) * dx
- + vec4( 2.6007355728658488e-01, 1.4968553250962457e+00, 3.0913652594248364e+00, 1.0)) * dx
- + vec4( 2.0810000000000001e-01, 1.6630000000000000e-01, 5.2920000000000000e-01, 1.0);
- } else if (x < 4.6875000000000000e-02) {
- float dx = x - 3.1250000000000000e-02;
- return ((vec4(-5.1390461057291191e+01, 1.2211762733842230e+01, -1.2843448884986955e+01, 1.0) * dx
- + vec4(-6.6335515704472066e+00, 1.1377204386589042e+00, 2.1332987618665173e+00, 1.0)) * dx
- + vec4( 1.5642431399834725e-01, 1.5146322069502911e+00, 3.1246980525790007e+00, 1.0)) * dx
- + vec4( 2.1162380952380999e-01, 1.8978095238095199e-01, 5.7767619047619101e-01, 1.0);
- } else if (x < 6.2500000000000000e-02) {
- float dx = x - 4.6875000000000000e-02;
- return ((vec4(-1.4725107464858192e+02, 1.3014608277362621e+01, 5.8634219534912217e+00, 1.0) * dx
- + vec4(-9.0424794325077311e+00, 1.7101468168077587e+00, 1.5312620953827538e+00, 1.0)) * dx
- + vec4(-8.8513670422823654e-02, 1.5591301328169576e+00, 3.1819568159735203e+00, 1.0)) * dx
- + vec4( 2.1225238095238100e-01, 2.1377142857142900e-01, 6.2697142857142896e-01, 1.0);
- } else if (x < 7.8125000000000000e-02) {
- float dx = x - 6.2500000000000000e-02;
- return ((vec4(-2.1469400225321081e+02, -1.4338005366630648e+01, -4.1817857976177763e+01, 1.0) * dx
- + vec4(-1.5944873556660008e+01, 2.3202065798091316e+00, 1.8061099994526548e+00, 1.0)) * dx
- + vec4(-4.7894106087856969e-01, 1.6221044046390967e+00, 3.2341032549553237e+00, 1.0)) * dx
- + vec4( 2.0810000000000001e-01, 2.3860000000000001e-01, 6.7708571428571396e-01, 1.0);
- } else if (x < 9.3750000000000000e-02) {
- float dx = x - 7.8125000000000000e-02;
- return ((vec4(-2.8846495443400278e+02, 2.0037550842697090e+02, 1.1771734328417965e+02, 1.0) * dx
- + vec4(-2.6008654912279265e+01, 1.6481125782483199e+00, -1.5410209318067788e-01, 1.0)) * dx
- + vec4(-1.1344649432057459e+00, 1.6841093914837442e+00, 3.2599158784908235e+00, 1.0)) * dx
- + vec4( 1.9590476190476200e-01, 2.6445714285714300e-01, 7.2789999999999999e-01, 1.0);
- } else if (x < 1.0937500000000000e-01) {
- float dx = x - 9.3750000000000000e-02;
- return ((vec4(-5.4509738001026233e+02, 5.1696771659011155e+01, -6.5374637230314454e+02, 1.0) * dx
- + vec4(-3.9530449651373146e+01, 1.1040714535762580e+01, 5.3638983732652425e+00, 1.0)) * dx
- + vec4(-2.1585134520128149e+00, 1.8823723151401646e+00, 3.3413189453671448e+00, 1.0)) * dx
- + vec4( 1.7072857142857101e-01, 2.9193809523809500e-01, 7.7924761904761897e-01, 1.0);
- } else if (x < 1.2500000000000000e-01) {
- float dx = x - 1.0937500000000000e-01;
- return ((vec4( 2.3639968744743715e+03, -8.1036503315845437e+02, -8.1573269216733058e+02, 1.0) * dx
- + vec4(-6.5081889339354191e+01, 1.3464000707278728e+01, -2.5280462828444659e+01, 1.0)) * dx
- + vec4(-3.7930812487429293e+00, 2.2652584908126849e+00, 3.0301226257549660e+00, 1.0)) * dx
- + vec4( 1.2527142857142901e-01, 3.2424285714285700e-01, 8.3027142857142899e-01, 1.0);
- } else if (x < 1.4062500000000000e-01) {
- float dx = x - 1.2500000000000000e-01;
- return ((vec4( 1.4125902630655582e+03, 2.5375056097507152e+02, 9.0826266478267496e+02, 1.0) * dx
- + vec4( 4.5730464151631985e+01, -2.4521860222023822e+01, -6.3517932773788282e+01, 1.0)) * dx
- + vec4(-4.0954472673010889e+00, 2.0924794358947931e+00, 1.6426476944700765e+00, 1.0)) * dx
- + vec4( 5.9133333333333399e-02, 3.5983333333333301e-01, 8.6833333333333296e-01, 1.0);
- } else if (x < 1.5625000000000000e-01) {
- float dx = x - 1.4062500000000000e-01;
- return ((vec4(-1.9850459267366693e+03, 1.4738473211499172e+02, 2.4976683303608979e+02, 1.0) * dx
- + vec4( 1.1194563273283002e+02, -1.2627302676317344e+01, -2.0943120362100398e+01, 1.0)) * dx
- + vec4(-1.6317582534813697e+00, 1.5120237656082123e+00, 3.2294373922181602e-01, 1.0)) * dx
- + vec4( 1.1695238095238101e-02, 3.8750952380952403e-01, 8.8195714285714299e-01, 1.0);
- } else if (x < 1.7187500000000000e-01) {
- float dx = x - 1.5625000000000000e-01;
- return ((vec4(-1.3211246088080517e+02, 6.1731462945951478e+01, 9.6199145930320853e+01, 1.0) * dx
- + vec4( 1.8896604917048652e+01, -5.7186433584271068e+00, -9.2353000635336890e+00, 1.0)) * dx
- + vec4( 4.1265170979798449e-01, 1.2253683588153301e+00, -1.4859407992871662e-01, 1.0)) * dx
- + vec4( 5.9571428571428596e-03, 4.0861428571428599e-01, 8.8284285714285704e-01, 1.0);
- } else if (x < 1.8750000000000000e-01) {
- float dx = x - 1.7187500000000000e-01;
- return ((vec4(-2.4276114402580023e+02, 1.8878292291818184e+01, 5.4500811814199913e+01, 1.0) * dx
- + vec4( 1.2703833313260910e+01, -2.8249810328356313e+00, -4.7259650980498993e+00, 1.0)) * dx
- + vec4( 9.0640855714657143e-01, 1.0918742277018498e+00, -3.6673884807846019e-01, 1.0)) * dx
- + vec4( 1.6514285714285700e-02, 4.2659999999999998e-01, 8.7863333333333304e-01, 1.0);
- } else if (x < 2.0312500000000000e-01) {
- float dx = x - 1.8750000000000000e-01;
- return ((vec4(-2.4875702015890445e+02, 2.7531596458333780e+01, 1.1605149669749400e+01, 1.0) * dx
- + vec4( 1.3244046870515243e+00, -1.9400610816566539e+00, -2.1712395442592785e+00, 1.0)) * dx
- + vec4( 1.1255997759014531e+00, 1.0174204446629080e+00, -4.7450767061454108e-01, 1.0)) * dx
- + vec4( 3.2852380952381001e-02, 4.4304285714285702e-01, 8.7195714285714299e-01, 1.0);
- } else if (x < 2.1875000000000000e-01) {
- float dx = x - 2.0312500000000000e-01;
- return ((vec4( 6.6879357994795782e+01, 3.3156266362545779e+00, 3.1398894268734253e+01, 1.0) * dx
- + vec4(-1.0336080632897122e+01, -6.4951749767225808e-01, -1.6272481534897754e+00, 1.0)) * dx
- + vec4( 9.8479233924761567e-01, 9.7695827936089374e-01, -5.3385904089187008e-01, 1.0)) * dx
- + vec4( 4.9814285714285700e-02, 4.5857142857142902e-01, 8.6405714285714297e-01, 1.0);
- } else if (x < 2.3437500000000000e-01) {
- float dx = x - 2.1875000000000000e-01;
- return ((vec4(-3.7807546774099214e+00, 2.9110963663947160e+01, 2.0085673255558202e+01, 1.0) * dx
- + vec4(-7.2011107268910699e+00, -4.9409749909782474e-01, -1.5542498464285720e-01, 1.0)) * dx
- + vec4( 7.1077372425092522e-01, 9.5908929503636120e-01, -5.6171330867519242e-01, 1.0)) * dx
- + vec4( 6.2933333333333299e-02, 4.7369047619047600e-01, 8.5543809523809500e-01, 1.0);
- } else if (x < 2.5000000000000000e-01) {
- float dx = x - 2.3437500000000000e-01;
- return ((vec4(-1.8052110713761824e+01, 7.5676044216235097e+00, 2.6820241280346455e+01, 1.0) * dx
- + vec4(-7.3783336023946600e+00, 8.7047892264969851e-01, 7.8609094921143352e-01, 1.0)) * dx
- + vec4( 4.8296990660583561e-01, 9.6497025477935916e-01, -5.5185915297880839e-01, 1.0)) * dx
- + vec4( 7.2266666666666701e-02, 4.8866666666666703e-01, 8.4670000000000001e-01, 1.0);
- } else if (x < 2.6562500000000000e-01) {
- float dx = x - 2.5000000000000000e-01;
- return ((vec4(-8.5042116753280467e+01, 3.9234694840689350e+01, 6.3623990194130904e+01, 1.0) * dx
- + vec4(-8.2245262921022455e+00, 1.2252103799133005e+00, 2.0432897592276738e+00, 1.0)) * dx
- + vec4( 2.3917522075432149e-01, 9.9771540013190607e-01, -5.0765007940944740e-01, 1.0)) * dx
- + vec4( 7.7942857142857203e-02, 5.0398571428571404e-01, 8.3837142857142899e-01, 1.0);
- } else if (x < 2.8125000000000000e-01) {
- float dx = x - 2.6562500000000000e-01;
- return ((vec4(-4.4981860368289709e+01, 3.5222378119677195e+01, 1.8276940800992332e+01, 1.0) * dx
- + vec4(-1.2210875514912267e+01, 3.0643367005706139e+00, 5.0256642995775600e+00, 1.0)) * dx
- + vec4(-8.0127932480280273e-02, 1.0647395732644671e+00, -3.9719767224061564e-01, 1.0)) * dx
- + vec4( 7.9347619047619000e-02, 5.2002380952381000e-01, 8.3118095238095202e-01, 1.0);
- } else if (x < 2.9687500000000000e-01) {
- float dx = x - 2.8125000000000000e-01;
- return ((vec4( 8.8958586797831074e+01, -6.4031864461777545e+01, -5.4343639113056135e+01, 1.0) * dx
- + vec4(-1.4319400219675847e+01, 4.7153856749304826e+00, 5.8823958996240755e+00, 1.0)) * dx
- + vec4(-4.9466349083321959e-01, 1.1862977353816719e+00, -2.2675923162809006e-01, 1.0)) * dx
- + vec4( 7.4942857142857103e-02, 5.3754285714285699e-01, 8.2627142857142899e-01, 1.0);
- } else if (x < 3.1250000000000000e-01) {
- float dx = x - 2.9687500000000000e-01;
- return ((vec4( 2.3465669412937996e+02, -7.4943148843863256e+01, -1.7040059387215410e+02, 1.0) * dx
- + vec4(-1.0149466463527515e+01, 1.7138920282846606e+00, 3.3350378161995691e+00, 1.0)) * dx
- + vec4(-8.7698953275827207e-01, 1.2867551994944084e+00, -8.2736829818345611e-02, 1.0)) * dx
- + vec4( 6.4057142857142799e-02, 5.5698571428571397e-01, 8.2395714285714305e-01, 1.0);
- } else if (x < 3.2812500000000000e-01) {
- float dx = x - 3.1250000000000000e-01;
- return ((vec4( 3.5054309382746595e+02, -7.5598816353949772e+01, -5.9224118732067950e+01, 1.0) * dx
- + vec4( 8.5006607378717081e-01, -1.7990680737714295e+00, -4.6524900215576546e+00, 1.0)) * dx
- + vec4(-1.0222926638479650e+00, 1.2854243237836778e+00, -1.0332202052706571e-01, 1.0)) * dx
- + vec4( 4.8771428571428597e-02, 5.7722380952381003e-01, 8.2282857142857202e-01, 1.0);
- } else if (x < 3.4375000000000000e-01) {
- float dx = x - 3.2812500000000000e-01;
- return ((vec4(-1.3511844086782639e+02, 2.1571557117596814e+01, 6.5912402293741552e+00, 1.0) * dx
- + vec4( 1.7281773596949638e+01, -5.3427625903628249e+00, -7.4286205871233397e+00, 1.0)) * dx
- + vec4(-7.3898266899270237e-01, 1.1738332196565799e+00, -2.9208937378770627e-01, 1.0)) * dx
- + vec4( 3.4342857142857203e-02, 5.9658095238095199e-01, 8.1985238095238100e-01, 1.0);
- } else if (x < 3.5937500000000000e-01) {
- float dx = x - 3.4375000000000000e-01;
- return ((vec4(-1.6458788273706924e+02, 1.0533768835542057e+01, 3.0362548290707878e+01, 1.0) * dx
- + vec4( 1.0948096681270275e+01, -4.3315958504754741e+00, -7.1196562013714262e+00, 1.0)) * dx
- + vec4(-2.9789094589551629e-01, 1.0226713690184817e+00, -5.1940619860793691e-01, 1.0)) * dx
- + vec4( 2.6499999999999999e-02, 6.1370000000000002e-01, 8.1350000000000000e-01, 1.0);
- } else if (x < 3.7500000000000000e-01) {
- float dx = x - 3.5937500000000000e-01;
- return ((vec4(-1.0406115199344315e+02, 1.9929786587720105e+01, 3.6734795179105028e+01, 1.0) * dx
- + vec4( 3.2330396779701545e+00, -3.8378254363094402e+00, -5.6964117502444944e+00, 1.0)) * dx
- + vec4(-7.6310690282384588e-02, 8.9502416141246732e-01, -7.1965726035193567e-01, 1.0)) * dx
- + vec4( 2.3890476190476202e-02, 6.2866190476190498e-01, 8.0376190476190501e-01, 1.0);
- } else if (x < 3.9062500000000000e-01) {
- float dx = x - 3.7500000000000000e-01;
- return ((vec4( 2.3255546213942225e+02, 1.8349599099637384e+01, 1.7433813849989207e+01, 1.0) * dx
- + vec4(-1.6448268217224928e+00, -2.9036166900100602e+00, -3.9744682262239461e+00, 1.0)) * dx
- + vec4(-5.1494864403514876e-02, 7.8968912818872505e-01, -8.7076475998425507e-01, 1.0)) * dx
- + vec4( 2.3090476190476199e-02, 6.4178571428571396e-01, 7.9126666666666701e-01, 1.0);
- } else if (x < 4.0625000000000000e-01) {
- float dx = x - 3.9062500000000000e-01;
- return ((vec4( 1.5126193200717549e+02, 2.0267550346934740e+01, 2.0857035135376179e+01, 1.0) * dx
- + vec4( 9.2562104660629245e+00, -2.0434792322145579e+00, -3.1572582020057021e+00, 1.0)) * dx
- + vec4( 6.7433005039304356e-02, 7.1239075440396538e-01, -9.8219798542534331e-01, 1.0)) * dx
- + vec4( 2.2771428571428599e-02, 6.5348571428571400e-01, 7.7675714285714303e-01, 1.0);
- } else if (x < 4.2187500000000000e-01) {
- float dx = x - 4.0625000000000000e-01;
- return ((vec4( 1.0861181935568159e+02, -5.7969433444380156e+00, 3.9956456082908054e+00, 1.0) * dx
- + vec4( 1.6346613528899276e+01, -1.0934378097019919e+00, -2.1795846800349437e+00, 1.0)) * dx
- + vec4( 4.6747712996058871e-01, 6.6337642562401933e-01, -1.0655861554572283e+00, 1.0)) * dx
- + vec4( 2.6661904761904800e-02, 6.6419523809523795e-01, 7.6071904761904796e-01, 1.0);
- } else if (x < 4.3750000000000000e-01) {
- float dx = x - 4.2187500000000000e-01;
- return ((vec4(-3.0484063800132168e+02, 1.4154965887634640e+01, -3.1353889969814710e+00, 1.0) * dx
- + vec4( 2.1437792561196851e+01, -1.3651695289725239e+00, -1.9922887921463122e+00, 1.0)) * dx
- + vec4( 1.0578584751183406e+00, 6.2496068595722998e-01, -1.1307716784600605e+00, 1.0)) * dx
- + vec4( 3.8371428571428598e-02, 6.7427142857142897e-01, 7.4355238095238096e-01, 1.0);
- } else if (x < 4.5312500000000000e-01) {
- float dx = x - 4.3750000000000000e-01;
- return ((vec4( 1.9732370744832981e+01, -3.3873392535419122e+00, -5.1854420010455629e+00, 1.0) * dx
- + vec4( 7.1483876548848961e+00, -7.0165550298965007e-01, -2.1392601513798186e+00, 1.0)) * dx
- + vec4( 1.5045175409946179e+00, 5.9266654483282100e-01, -1.1953271307026563e+00, 1.0)) * dx
- + vec4( 5.8971428571428598e-02, 6.8375714285714295e-01, 7.2538571428571397e-01, 1.0);
- } else if (x < 4.6875000000000000e-01) {
- float dx = x - 4.5312500000000000e-01;
- return ((vec4(-5.2460806882781675e+01, -6.0560887320505685e-01, 1.3890718905419471e+01, 1.0) * dx
- + vec4( 8.0733425335489422e+00, -8.6043703049942721e-01, -2.3823277451788294e+00, 1.0)) * dx
- + vec4( 1.7423570751888966e+00, 5.6825884899705426e-01, -1.2659769415863851e+00, 1.0)) * dx
- + vec4( 8.4300000000000000e-02, 6.9283333333333297e-01, 7.0616666666666705e-01, 1.0);
- } else if (x < 4.8437500000000000e-01) {
- float dx = x - 4.6875000000000000e-01;
- return ((vec4( 1.0354971072183483e+01, 5.8097747460711062e+00, -5.4384621916749820e+00, 1.0) * dx
- + vec4( 5.6142422109185510e+00, -8.8882494643091425e-01, -1.7312002964872917e+00, 1.0)) * dx
- + vec4( 1.9562255868212013e+00, 5.4092663060751767e-01, -1.3302508172374183e+00, 1.0)) * dx
- + vec4( 1.1329523809523800e-01, 7.0150000000000001e-01, 6.8585714285714305e-01, 1.0);
- } else if (x < 5.0000000000000000e-01) {
- float dx = x - 4.8437500000000000e-01;
- return ((vec4(-1.3925172644537971e+01, -8.9021377300786071e+00, -4.6199177582688593e+00, 1.0) * dx
- + vec4( 6.0996314799271518e+00, -6.1649175520883115e-01, -1.9861282117220564e+00, 1.0)) * dx
- + vec4( 2.1392548632406654e+00, 5.1740605714439658e-01, -1.3883340751781894e+00, 1.0)) * dx
- + vec4( 1.4527142857142900e-01, 7.0975714285714298e-01, 6.6462857142857201e-01, 1.0);
- } else if (x < 5.1562500000000000e-01) {
- float dx = x - 5.0000000000000000e-01;
- return ((vec4( 3.1614367125520630e+01, -1.1395280968671647e+01, 2.1421523701702025e+01, 1.0) * dx
- + vec4( 5.4468890122144344e+00, -1.0337794613062659e+00, -2.2026868566409092e+00, 1.0)) * dx
- + vec4( 2.3196692459303776e+00, 4.9162056938634824e-01, -1.4537843106213608e+00, 1.0)) * dx
- + vec4( 1.8013333333333301e-01, 7.1765714285714299e-01, 6.4243333333333297e-01, 1.0);
- } else if (x < 5.3125000000000000e-01) {
- float dx = x - 5.1562500000000000e-01;
- return ((vec4(-3.7634010143333590e+01, 2.0544616050328934e+00, 1.3219372364175872e+00, 1.0) * dx
- + vec4( 6.9288124712232140e+00, -1.5679332567127493e+00, -1.1985529331236269e+00, 1.0)) * dx
- + vec4( 2.5130395816090907e+00, 4.5096880816730112e-01, -1.5069286823364316e+00, 1.0)) * dx
- + vec4( 2.1782857142857101e-01, 7.2504285714285699e-01, 6.1926190476190501e-01, 1.0);
- } else if (x < 5.4687500000000000e-01) {
- float dx = x - 5.3125000000000000e-01;
- return ((vec4( 1.2815768685879013e+01, -1.4298832118473902e+01, 3.9450879734146490e+01, 1.0) * dx
- + vec4( 5.1647182457544520e+00, -1.4716303689768324e+00, -1.1365871251665525e+00, 1.0)) * dx
- + vec4( 2.7020009990618670e+00, 4.0347562651590141e-01, -1.5434152457472157e+00, 1.0)) * dx
- + vec4( 2.5864285714285701e-01, 7.3171428571428598e-01, 5.9542857142857097e-01, 1.0);
- } else if (x < 5.6250000000000000e-01) {
- float dx = x - 5.4687500000000000e-01;
- return ((vec4(-7.8540912219456771e+01, -1.8509114083431125e+01, 3.3113477160250433e+01, 1.0) * dx
- + vec4( 5.7654574029050307e+00, -2.1418881245302965e+00, 7.1267286237156402e-01, 1.0)) * dx
- + vec4( 2.8727849935721714e+00, 3.4701440005485251e-01, -1.5500389061033872e+00, 1.0)) * dx
- + vec4( 3.0217142857142898e-01, 7.3760476190476199e-01, 5.7118571428571396e-01, 1.0);
- } else if (x < 5.7812500000000000e-01) {
- float dx = x - 5.6250000000000000e-01;
- return ((vec4(-5.8163891236508938e+01, 9.6920884524980497e+00, 3.0320583052976861e+01, 1.0) * dx
- + vec4( 2.0838521426179946e+00, -3.0095028471911305e+00, 2.2648671042583031e+00, 1.0)) * dx
- + vec4( 2.9954304552209687e+00, 2.6652391612170523e-01, -1.5035148441247956e+00, 1.0)) * dx
- + vec4( 3.4816666666666701e-01, 7.4243333333333295e-01, 5.4726666666666701e-01, 1.0);
- } else if (x < 5.9375000000000000e-01) {
- float dx = x - 5.7812500000000000e-01;
- return ((vec4(-6.4543256167712116e+01, -2.8636353652780144e-01, 2.8905906284068501e+00, 1.0) * dx
- + vec4(-6.4258025909336181e-01, -2.5551862009802844e+00, 3.6861444348665935e+00, 1.0)) * dx
- + vec4( 3.0179503284010409e+00, 1.7957564974402687e-01, -1.4105302888259692e+00, 1.0)) * dx
- + vec4( 3.9525714285714297e-01, 7.4590000000000001e-01, 5.2444285714285699e-01, 1.0);
- } else if (x < 6.0937500000000000e-01) {
- float dx = x - 5.9375000000000000e-01;
- return ((vec4(-2.4450284092939786e+01, 1.3922851408411924e+01, -1.6916850328844372e+01, 1.0) * dx
- + vec4(-3.6680453919548675e+00, -2.5686094917550251e+00, 3.8216408705731646e+00, 1.0)) * dx
- + vec4( 2.9505968026034126e+00, 9.9516342045037676e-02, -1.2932211434284731e+00, 1.0)) * dx
- + vec4( 4.4200952380952402e-01, 7.4808095238095196e-01, 5.0331428571428605e-01, 1.0);
- } else if (x < 6.2500000000000000e-01) {
- float dx = x - 6.0937500000000000e-01;
- return ((vec4( 1.2547821111311350e+01, 1.5748329330961459e+01, -1.7611303598786566e+01, 1.0) * dx
- + vec4(-4.8141524588114200e+00, -1.9159758319857161e+00, 3.0286635114085847e+00, 1.0)) * dx
- + vec4( 2.8180624611851890e+00, 2.9444696361588602e-02, -1.1861851374600081e+00, 1.0)) * dx
- + vec4( 4.8712380952380901e-01, 7.4906190476190504e-01, 4.8397619047619100e-01, 1.0);
- } else if (x < 6.4062500000000000e-01) {
- float dx = x - 6.2500000000000000e-01;
- return ((vec4( 9.2115329809656430e+00, -3.2661877796437579e+00, -1.2675733711774058e+00, 1.0) * dx
- + vec4(-4.2259733442187004e+00, -1.1777728945968977e+00, 2.2031336552154643e+00, 1.0)) * dx
- + vec4( 2.6768104955128438e+00, -1.8895127491264742e-02, -1.1044383067315073e+00, 1.0)) * dx
- + vec4( 5.3002857142857096e-01, 7.4911428571428595e-01, 4.6611428571428598e-01, 1.0);
- } else if (x < 6.5625000000000000e-01) {
- float dx = x - 6.4062500000000000e-01;
- return ((vec4( 1.4269589821681299e+01, 7.3028598827757278e+00, -8.5260219639800940e+00, 1.0) * dx
- + vec4(-3.7941827357359359e+00, -1.3308754467676989e+00, 2.1437161534415234e+00, 1.0)) * dx
- + vec4( 2.5514955567635522e+00, -5.8092757825086563e-02, -1.0365187784712420e+00, 1.0)) * dx
- + vec4( 5.7085714285714295e-01, 7.4851904761904797e-01, 4.4939047619047601e-01, 1.0);
- } else if (x < 6.7187500000000000e-01) {
- float dx = x - 6.5625000000000000e-01;
- return ((vec4( 8.6083934467238432e+00, 2.6914824850885094e-01, -1.7057138772896455e+01, 1.0) * dx
- + vec4(-3.1252957128446250e+00, -9.8855388976258662e-01, 1.7440588738799565e+00, 1.0)) * dx
- + vec4( 2.4433787060044811e+00, -9.4333841208372265e-02, -9.7577229366934382e-01, 1.0)) * dx
- + vec4( 6.0985238095238103e-01, 7.4731428571428604e-01, 4.3368571428571401e-01, 1.0);
- } else if (x < 6.8750000000000000e-01) {
- float dx = x - 6.7187500000000000e-01;
- return ((vec4( 8.7188554392023345e+00, 1.7834947123447904e+01, -1.8886229447019101e+00, 1.0) * dx
- + vec4(-2.7217772700294449e+00, -9.7593756561373424e-01, 9.4450549390043514e-01, 1.0)) * dx
- + vec4( 2.3520181906470738e+00, -1.2502902019862727e-01, -9.3376347542277516e-01, 1.0)) * dx
- + vec4( 6.4729999999999999e-01, 7.4560000000000004e-01, 4.1880000000000001e-01, 1.0);
- } else if (x < 7.0312500000000000e-01) {
- float dx = x - 6.8750000000000000e-01;
- return ((vec4( 8.9449847961700044e+00, -2.1676746266635202e+01, -4.0993789718798466e+00, 1.0) * dx
- + vec4(-2.3130809213168355e+00, -1.3992441920211368e-01, 8.5597629336753311e-01, 1.0)) * dx
- + vec4( 2.2733485314072883e+00, -1.4246436371137491e-01, -9.0563094749671313e-01, 1.0)) * dx
- + vec4( 6.8341904761904804e-01, 7.4347619047619096e-01, 4.0443333333333298e-01, 1.0);
- } else if (x < 7.1875000000000000e-01) {
- float dx = x - 7.0312500000000000e-01;
- return ((vec4( 1.1674919661892304e+01, 2.3933066515154213e+01, -1.1673175453308831e+01, 1.0) * dx
- + vec4(-1.8937847589963666e+00, -1.1560219004506387e+00, 6.6381790406066532e-01, 1.0)) * dx
- + vec4( 2.2076162551523946e+00, -1.6271352495594915e-01, -8.8188416316189755e-01, 1.0)) * dx
- + vec4( 7.1840952380952405e-01, 7.4113333333333298e-01, 3.9047619047618998e-01, 1.0);
- } else if (x < 7.3437500000000000e-01) {
- float dx = x - 7.1875000000000000e-01;
- return ((vec4(-4.4641682053710623e+00, 2.0910706819426692e+00, 4.6048045942407727e+00, 1.0) * dx
- + vec4(-1.3465228998451648e+00, -3.4159407552784897e-02, 1.1663780468681384e-01, 1.0)) * dx
- + vec4( 2.1569864479829954e+00, -1.8131010789350266e-01, -8.6968954271271826e-01, 1.0)) * dx
- + vec4( 7.5248571428571398e-01, 7.3839999999999995e-01, 3.7681428571428599e-01, 1.0);
- } else if (x < 7.5000000000000000e-01) {
- float dx = x - 7.3437500000000000e-01;
- return ((vec4( 1.2423276968973711e+01, -6.0829492432479162e+00, -2.1725700066572116e+01, 1.0) * dx
- + vec4(-1.5557807844719334e+00, 6.3859530663277708e-02, 3.3248802004185007e-01, 1.0)) * dx
- + vec4( 2.1116379529155407e+00, -1.8084604346990121e-01, -8.6267195170133282e-01, 1.0)) * dx
- + vec4( 7.8584285714285695e-01, 7.3556666666666704e-01, 3.6327142857142902e-01, 1.0);
- } else if (x < 7.6562500000000000e-01) {
- float dx = x - 7.5000000000000000e-01;
- return ((vec4( 3.4549460436900552e+00, 2.2240726291601970e+01, -7.5799471847609725e+00, 1.0) * dx
- + vec4(-9.7343967655129060e-01, -2.2127871511396835e-01, -6.8590417057871789e-01, 1.0)) * dx
- + vec4( 2.0721188832120530e+00, -1.8330571822694325e-01, -8.6819407905347146e-01, 1.0)) * dx
- + vec4( 8.1850476190476196e-01, 7.3273333333333301e-01, 3.4979047619047599e-01, 1.0);
- } else if (x < 7.8125000000000000e-01) {
- float dx = x - 7.6562500000000000e-01;
- return ((vec4( 8.7094721894791203e+00, 1.3239510743088688e+01, -2.2852796908624047e+01, 1.0) * dx
- + vec4(-8.1148908075331927e-01, 8.2125532980487381e-01, -1.0412141948643885e+00, 1.0)) * dx
- + vec4( 2.0442293713791684e+00, -1.7393108362239784e-01, -8.9518030351351996e-01, 1.0)) * dx
- + vec4( 8.5065714285714300e-01, 7.2989999999999999e-01, 3.3602857142857101e-01, 1.0);
- } else if (x < 7.9687500000000000e-01) {
- float dx = x - 7.8125000000000000e-01;
- return ((vec4(-1.2078434801289291e+01, 4.3390183117236198e+01, -3.9570693752303733e+01, 1.0) * dx
- + vec4(-4.0323257187148548e-01, 1.4418573958871561e+00, -2.1124390499561407e+00, 1.0)) * dx
- + vec4( 2.0252493455569058e+00, -1.3856994728345987e-01, -9.4445613546384066e-01, 1.0)) * dx
- + vec4( 8.8243333333333296e-01, 7.2743333333333304e-01, 3.2169999999999999e-01, 1.0);
- } else if (x < 8.1250000000000000e-01) {
- float dx = x - 7.9687500000000000e-01;
- return ((vec4(-1.2824532984374384e+01, 1.1653781393088177e+02, -1.1096774236821523e+02, 1.0) * dx
- + vec4(-9.6940920318192092e-01, 3.4757722295076028e+00, -3.9673153195953783e+00, 1.0)) * dx
- + vec4( 2.0038018178216963e+00, -6.1731984386666772e-02, -1.0394522974880831e+00, 1.0)) * dx
- + vec4( 9.1393333333333304e-01, 7.2578571428571403e-01, 3.0627619047619098e-01, 1.0);
- } else if (x < 8.2812500000000000e-01) {
- float dx = x - 8.1250000000000000e-01;
- return ((vec4(-3.5855044278532131e+02, 2.7064903734930277e+02, -8.0792089155266083e+01, 1.0) * dx
- + vec4(-1.5705591868244702e+00, 8.9384822575176859e+00, -9.1689282431054675e+00, 1.0)) * dx
- + vec4( 1.9641148117278464e+00, 1.3224074197310332e-01, -1.2447061031552840e+00, 1.0)) * dx
- + vec4( 9.4495714285714305e-01, 7.2611428571428605e-01, 2.8864285714285698e-01, 1.0);
- } else if (x < 8.4375000000000000e-01) {
- float dx = x - 8.2812500000000000e-01;
- return ((vec4(-3.8174017206443654e+02, -1.9549693475620506e+02, 4.4911575613188438e+02, 1.0) * dx
- + vec4(-1.8377611192386407e+01, 2.1625155883266252e+01, -1.2956057422258565e+01, 1.0)) * dx
- + vec4( 1.6524246495526764e+00, 6.0979758792285232e-01, -1.5904090041765968e+00, 1.0)) * dx
- + vec4( 9.7389523809523804e-01, 7.3139523809523799e-01, 2.6664761904761902e-01, 1.0);
- } else if (x < 8.5937500000000000e-01) {
- float dx = x - 8.4375000000000000e-01;
- return ((vec4( 4.3248438818547703e+02, -2.7134838403902307e+02, 3.3204036056432756e+01, 1.0) * dx
- + vec4(-3.6271681757906869e+01, 1.2461237066569140e+01, 8.0962436464235150e+00, 1.0)) * dx
- + vec4( 7.9852944720434427e-01, 1.1423974777640304e+00, -1.6663435944240195e+00, 1.0)) * dx
- + vec4( 9.9377142857142897e-01, 7.4545714285714304e-01, 2.4034761904761900e-01, 1.0);
- } else if (x < 8.7500000000000000e-01) {
- float dx = x - 8.5937500000000000e-01;
- return ((vec4( 1.7847934313241271e+02, -6.1117386114828536e+00, -1.0882439559595376e+02, 1.0) * dx
- + vec4(-1.5998976061712632e+01, -2.5821843526006538e-01, 9.6526828365688004e+00, 1.0)) * dx
- + vec4(-1.8199581227210410e-02, 1.3330696438782346e+00, -1.3890166181272647e+00, 1.0)) * dx
- + vec4( 9.9904285714285701e-01, 7.6531428571428595e-01, 2.1641428571428600e-01, 1.0);
- } else if (x < 8.9062500000000000e-01) {
- float dx = x - 8.7500000000000000e-01;
- return ((vec4( 1.0065469642774150e+02, 1.1181852770679304e+01, -4.2302948910418884e+01, 1.0) * dx
- + vec4(-7.6327568523807861e+00, -5.4470618267332416e-01, 4.5515392930084682e+00, 1.0)) * dx
- + vec4(-3.8744540800992006e-01, 1.3205239467230254e+00, -1.1670756473526198e+00, 1.0)) * dx
- + vec4( 9.9553333333333305e-01, 7.8605714285714301e-01, 1.9665238095238100e-01, 1.0);
- } else if (x < 9.0625000000000000e-01) {
- float dx = x - 8.9062500000000000e-01;
- return ((vec4( 5.1792385442186948e+01, 1.3813127528788970e+01, -4.7771351619749993e+01, 1.0) * dx
- + vec4(-2.9145679573304033e+00, -2.0556834047731776e-02, 2.5685885628325829e+00, 1.0)) * dx
- + vec4(-5.5224735816165738e-01, 1.3116917120867588e+00, -1.0558236496051034e+00, 1.0)) * dx
- + vec4( 9.8799999999999999e-01, 8.0659999999999998e-01, 1.7936666666666701e-01, 1.0);
- } else if (x < 9.2187500000000000e-01) {
- float dx = x - 9.0625000000000000e-01;
- return ((vec4( 1.1035785704157649e+02, 5.2154589495154021e+01, -3.9990387467675163e+01, 1.0) * dx
- + vec4(-4.8679988972789023e-01, 6.2693351886425119e-01, 3.2930645565680206e-01, 1.0)) * dx
- + vec4(-6.0539373077194325e-01, 1.3211663477870170e+00, -1.0105440399412067e+00, 1.0)) * dx
- + vec4( 9.7885714285714298e-01, 8.2714285714285696e-01, 1.6331428571428599e-01, 1.0);
- } else if (x < 9.3750000000000000e-01) {
- float dx = x - 9.2187500000000000e-01;
- return ((vec4( 4.6043843534396274e+01, 2.0987943062129727e+01, -2.3203479461840441e+01, 1.0) * dx
- + vec4( 4.6862246590960082e+00, 3.0716799014495959e+00, -1.5452429568904713e+00, 1.0)) * dx
- + vec4(-5.3977771875056635e-01, 1.3789571824794209e+00, -1.0295430477729828e+00, 1.0)) * dx
- + vec4( 9.6970000000000001e-01, 8.4813809523809502e-01, 1.4745238095238100e-01, 1.0);
- } else if (x < 9.5312500000000000e-01) {
- float dx = x - 9.3750000000000000e-01;
- return ((vec4( 6.1233625963980650e+01, 2.8669866827404956e+01, 2.4201791029260814e+01, 1.0) * dx
- + vec4( 6.8445298247708335e+00, 4.0554897324869268e+00, -2.6329060566642419e+00, 1.0)) * dx
- + vec4(-3.5960967994014698e-01, 1.4903192080096790e+00, -1.0948266261097752e+00, 1.0)) * dx
- + vec4( 9.6258571428571404e-01, 8.7051428571428602e-01, 1.3089999999999999e-01, 1.0);
- } else if (x < 9.6875000000000000e-01) {
- float dx = x - 9.5312500000000000e-01;
- return ((vec4( 4.1070719275903762e+01, 5.3910277236601019e+00, 2.0019172487757277e+01, 1.0) * dx
- + vec4( 9.7148560418324266e+00, 5.3993897400215340e+00, -1.4984471021676413e+00, 1.0)) * dx
- + vec4(-1.0086927577447102e-01, 1.6380516997676238e+00, -1.1593790192165234e+00, 1.0)) * dx
- + vec4( 9.5887142857142904e-01, 8.9490000000000003e-01, 1.1324285714285701e-01, 1.0);
- } else if (x < 9.8437500000000000e-01) {
- float dx = x - 9.6875000000000000e-01;
- return ((vec4(-5.3250445924665847e+01, -1.6529749150400146e+01, -1.4422423336140781e+02, 1.0) * dx
- + vec4( 1.1640046007890415e+01, 5.6520941645681013e+00, -5.6004839180401900e-01, 1.0)) * dx
- + vec4( 2.3280106875244833e-01, 1.8107311357768368e+00, -1.1915430113098306e+00, 1.0)) * dx
- + vec4( 9.5982380952380997e-01, 9.2183333333333295e-01, 9.4838095238095305e-02, 1.0);
- } else if (x < 1.0000000000000000e+00) {
- float dx = x - 9.8437500000000000e-01;
- return ((vec4(-1.9507053557699635e+02, -1.0404825969371934e+02, 1.5617193238656020e+02, 1.0) * dx
- + vec4( 9.1439313551717039e+00, 4.8772621731430945e+00, -7.3205593306200099e+00, 1.0)) * dx
- + vec4( 5.5755071505029385e-01, 1.9752523285535741e+00, -1.3146775069727061e+00, 1.0)) * dx
- + vec4( 9.6609999999999996e-01, 9.5144285714285703e-01, 7.5533333333333300e-02, 1.0);
- } else {
- float dx = x - 1.0000000000000000e+00;
- return ((vec4( 0.0000000000000000e+00, 3.4202936336155174e+00, 3.0625241907655076e+00, 1.0) * dx
- + vec4( 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0)) * dx
- + vec4( 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0)) * dx
- + vec4( 9.7629999999999995e-01, 9.8309999999999997e-01, 5.3800000000000001e-02, 1.0);
- }
-}
-*/
-uniform sampler2D colormap;
+uniform sampler2D colormaps;
+uniform int num_colormaps;
+uniform int colormap_id;
// can be either 0 or 1
uniform int reversed;
-/*
-BlackWhiteLinear = 0,
-RedTemperature = 1,
-IDLCBGnBu = 2,
-IDLCBYIGnBu = 3,
-BluePastelRed = 4,
-IDLCBBrBG = 5,
-viridis = 6,
-plasma = 7,
-magma = 8,
-inferno = 9,
-turbo = 10,
-YIOrBr = 11,
-stern = 12,
-EOSB = 13,
-spectral = 14,
-RdBu = 15,
-parula = 16,
-*/
+
vec4 colormap_f(float x) {
x = mix(x, 1.0 - x, float(reversed));
- /*// BlackWhiteLinear = 0,
- if (colormap == 0) {
- return blackw_f(x);
- // RedTemperature = 1,
- } else if (colormap == 1) {
- return red_f(x);
- // IDLCBGnBu = 2,
- } else if (colormap == 2) {
- return cbgnbu_f(x);
- // IDLCBYIGnBu = 3,
- } else if (colormap == 3) {
- return CBYIGnBu_f(x);
- // BluePastelRed = 4,
- } else if (colormap == 4) {
- return bluepastelred_f(x);
- // IDLCBBrBG = 5,
- } else if (colormap == 5) {
- return cbbrbg_f(x);
- // viridis = 6,
- } else if (colormap == 6) {
- return viridis_f(x);
- // plasma = 7,
- } else if (colormap == 7) {
- return plasma_f(x);
- // magma = 8,
- } else if (colormap == 8) {
- return magma_f(x);
- // inferno = 9,
- } else if (colormap == 9) {
- return inferno_f(x);
- // turbo = 10,
- } else if (colormap == 10) {
- return turbo_f(x);
- // YIOrBr = 11,
- } else if (colormap == 11) {
- return YIOrBr_f(x);
- // stern = 12,
- } else if (colormap == 12) {
- return stern_f(x);
- // EOSB = 13,
- } else if (colormap == 13) {
- return EOSB_f(x);
- // spectral = 14,
- } else if (colormap == 14) {
- return spectral_f(x);
- // RdBu = 15,
- } else if (colormap == 15) {
- return RdBu_f(x);
- // parula = 16,
- } else if (colormap == 16) {
- return parula_f(x);
- }*/
+ float id = (float(colormap_id) + 0.5) / float(num_colormaps);
- return texture(colormap, vec2(x, 0.5));
+ return texture(colormaps, vec2(x, id));
}
diff --git a/src/core/src/shaders/mod.rs b/src/core/src/shaders/mod.rs
index 07b727e0..595913cc 100644
--- a/src/core/src/shaders/mod.rs
+++ b/src/core/src/shaders/mod.rs
@@ -1,49 +1,38 @@
-/*#[derive(Clone, Copy, Debug)]
-pub enum Colormap {
- BlackWhiteLinear = 0,
- RedTemperature = 1,
- IDLCBGnBu = 2,
- IDLCBYIGnBu = 3,
- BluePastelRed = 4,
- IDLCBBrBG = 5,
- Viridis = 6,
- Plasma = 7,
- Magma = 8,
- Inferno = 9,
- Turbo = 10,
- YIOrBr = 11,
- Stern = 12,
- EOSB = 13,
- Spectral = 14,
- RdBu = 15,
- Parula = 16,
-}
-use std::borrow::Cow;
+/*
+blackwhite = 0,
+blues = 1,
+parula = 2,
+rainbow = 3,
+redtemperature = 4,
+RdBu = 5,
+RdYiBu = 6,
+spectral = 7,
+summer = 8,
+YIGnBu = 9,
+YIOrBr = 10,
*/
-use std::rc::Rc;
-pub struct Colormap {
- name: String,
- tex: Texture2D
+use std::collections::HashMap;
+pub struct Colormaps {
+ tex: Texture2D,
+ colormaps: HashMap<&'static str, Colormap>,
}
-impl fmt::Debug for Colormap {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- f.debug_struct("Colormap")
- .field("name", &self.name)
- .finish()
- }
-}
-use crate::WebGl2Context;
-use wasm_bindgen::JsValue;
-use crate::core::Texture2D;
-use crate::resources::Resources;
-use web_sys::WebGl2RenderingContext;
-use crate::image_fmt::FormatImageType;
-use crate::shader::ShaderId;
-use std::borrow::Cow;
-impl Colormap {
- pub fn new(gl: &WebGl2Context, rs: &Resources, name: &str) -> Result {
- let colormap_filename = rs.get_filename(name).unwrap();
+impl Colormaps {
+ pub fn new(gl: &WebGl2Context, rs: &Resources) -> Result {
+ let colormaps: HashMap<&str, Colormap> = [
+ ("blackwhite", Colormap { name: "blackwhite", id: 0 }),
+ ("blues", Colormap { name: "blues", id: 1 }),
+ ("parula", Colormap { name: "parula", id: 2 }),
+ ("rainbow", Colormap { name: "rainbow", id: 3 }),
+ ("RdBu", Colormap { name: "RdBu", id: 4 }),
+ ("RdYiBu", Colormap { name: "RdYiBu", id: 5 }),
+ ("redtemperature", Colormap { name: "redtemperature", id: 6 }),
+ ("spectral", Colormap { name: "spectral", id: 7 }),
+ ("summer", Colormap { name: "summer", id: 8 }),
+ ("YIGnBu", Colormap { name: "YIGnBu", id: 9 }),
+ ("YIOrBr", Colormap { name: "YIOrBr", id: 10 }),
+ ].iter().cloned().collect();
+ let colormap_filename = rs.get_filename("colormaps").unwrap();
let tex = Texture2D::create(
gl,
"colormap",
@@ -70,249 +59,86 @@ impl Colormap {
],
FormatImageType::PNG,
)?;
- Ok(Colormap {
- name: name.to_string(),
- tex: tex
+
+ Ok(Self {
+ colormaps,
+ tex
})
}
#[inline]
pub const fn get_list_available_colormaps() -> &'static [&'static str] {
&[
- "RedTemperature",
- "BluePastelRed",
- "IDLCBGnBu",
- "IDLCBYIGnBu",
- "IDLCBBrBG",
- "YIOrBr",
- "Viridis",
- "Plasma",
- "Magma",
- "Inferno",
- "Turbo",
- "Stern",
- "EOSB",
- "Spectral",
+ "blackwhite",
+ "blues",
+ "parula",
+ "rainbow",
"RdBu",
- "Parula",
- "BlackWhiteLinear",
+ "RdYiBu",
+ "redtemperature",
+ "spectral",
+ "summer",
+ "YIGnBu",
+ "YIOrBr",
]
}
-
- pub fn get_catalog_shader<'a>(gl: &WebGl2Context, shaders: &'a mut ShaderManager) -> &'a Shader {
+
+ pub fn get(&self, name: &str) -> Colormap {
+ let c = if let Some(c) = self.colormaps.get(name) {
+ c
+ } else {
+ self.colormaps.get("blackwhite").unwrap()
+ };
+
+ *c
+ }
+}
+
+#[derive(Clone, Debug, Copy)]
+pub struct Colormap {
+ pub name: &'static str,
+ pub id: i32,
+}
+
+use crate::WebGl2Context;
+use wasm_bindgen::JsValue;
+use crate::core::Texture2D;
+use crate::resources::Resources;
+use web_sys::WebGl2RenderingContext;
+use crate::image_fmt::FormatImageType;
+use crate::shader::ShaderId;
+use std::borrow::Cow;
+impl Colormap {
+ pub fn get_catalog_shader<'a>(gl: &WebGl2Context, shaders: &'a mut ShaderManager) -> Result<&'a Shader, JsValue> {
shaders.get(
gl,
&ShaderId(
Cow::Borrowed("ColormapCatalogVS"),
Cow::Borrowed("ColormapCatalogFS"),
),
- ).unwrap()
- }
-}
-use std::fmt;
-impl fmt::Display for Colormap {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "Colormap name: {}", self.name)
+ ).map_err(|e| e.into())
}
}
-/*
-use crate::{shader::ShaderId, WebGl2Context};
-impl Colormap {
- pub fn new(id: &str) -> Self {
- if id.contains("RedTemperature") {
- Colormap::RedTemperature
- } else if id.contains("BluePastelRed") {
- Colormap::BluePastelRed
- } else if id.contains("IDLCBGnBu") {
- Colormap::IDLCBGnBu
- } else if id.contains("IDLCBYIGnBu") {
- Colormap::IDLCBYIGnBu
- } else if id.contains("IDLCBBrBG") {
- Colormap::IDLCBBrBG
- } else if id.contains("Viridis") {
- Colormap::Viridis
- } else if id.contains("Plasma") {
- Colormap::Plasma
- } else if id.contains("Magma") {
- Colormap::Magma
- } else if id.contains("Inferno") {
- Colormap::Inferno
- } else if id.contains("Turbo") {
- Colormap::Turbo
- } else if id.contains("YIOrBr") {
- Colormap::YIOrBr
- } else if id.contains("Stern") {
- Colormap::Stern
- } else if id.contains("EOSB") {
- Colormap::EOSB
- } else if id.contains("Spectral") {
- Colormap::Spectral
- } else if id.contains("RdBu") {
- Colormap::RdBu
- } else if id.contains("Parula") {
- Colormap::Parula
- } else {
- Colormap::BlackWhiteLinear
- }
- }
-
-
-
- pub fn get_shader<'a>(&self, gl: &WebGl2Context, shaders: &'a mut ShaderManager) -> &'a Shader {
- let shader = match self {
- Colormap::BlackWhiteLinear => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapBlackWhiteFS"),
- ),
- ),
- Colormap::RedTemperature => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapRedTemperatureFS"),
- ),
- ),
- Colormap::IDLCBGnBu => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_GnBuFS"),
- ),
- ),
- Colormap::IDLCBYIGnBu => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_YIGnBuFS"),
- ),
- ),
- Colormap::BluePastelRed => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapBluePastelRedFS"),
- ),
- ),
- Colormap::IDLCBBrBG => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Viridis => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Plasma => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Magma => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Inferno => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Turbo => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::YIOrBr => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Stern => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::EOSB => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Spectral => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::RdBu => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- // TODO: update with correct shader
- Colormap::Parula => shaders.get(
- gl,
- &ShaderId(
- Cow::Borrowed("ColormapVS"),
- Cow::Borrowed("ColormapIDL_CB_BrBGFS"),
- ),
- ),
- };
-
- shader.unwrap()
- }
-}
-*/
use crate::shader::SendUniforms;
use crate::shader::ShaderBound;
-impl SendUniforms for Colormap {
+impl SendUniforms for Colormaps {
fn attach_uniforms<'a>(&self, shader: &'a ShaderBound<'a>) -> &'a ShaderBound<'a> {
- shader.attach_uniform("colormap", &self.tex);
+ shader.attach_uniform("colormaps", &self.tex)
+ .attach_uniform("num_colormaps", &(self.colormaps.len() as i32));
shader
}
}
-/*
-impl From for Colormap {
- fn from(id: String) -> Self {
- Colormap::new(&id)
+
+impl SendUniforms for Colormap {
+ fn attach_uniforms<'a>(&self, shader: &'a ShaderBound<'a>) -> &'a ShaderBound<'a> {
+ shader.attach_uniform("colormap_id", &self.id);
+
+ shader
}
}
-*/
+
use crate::Shader;
use crate::ShaderManager;
diff --git a/src/js/View.js b/src/js/View.js
index c73ab37f..93845024 100644
--- a/src/js/View.js
+++ b/src/js/View.js
@@ -54,7 +54,7 @@ import { requestAnimFrame } from "./libs/RequestAnimationFrame.js";
import { loadShaders } from './Shaders.js';
// Import kernel image
import kernel from '../core/img/kernel.png';
-import parula from '../core/img/parula.png';
+import colormaps from '../core/img/colormaps/colormaps.png';
import { ImageSurveyLayer } from "./ImageSurveyLayer.js";
@@ -78,7 +78,7 @@ export let View = (function() {
// Start our Rust application. You can find `WebClient` in `src/lib.rs`
let resources = {
'kernel': kernel,
- 'parula': parula,
+ 'colormaps': colormaps,
};
this.aladin.webglAPI = new Aladin.wasmLibs.webgl.WebClient(this.aladinDiv.id, shaders, resources);
|