mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-07-03 08:06:46 +02:00
add builtin shaders
This commit is contained in:
@ -0,0 +1,90 @@
|
||||
#include "./shaders_builtin.hpp"
|
||||
|
||||
#include <mm/fs_const_archiver.hpp>
|
||||
|
||||
namespace MM::OpenGL {
|
||||
|
||||
void load_builtin_shaders_fs(void) {
|
||||
|
||||
// ==================== sampling.glsl ==================== START
|
||||
FS_CONST_MOUNT_FILE("/shaders/builtin/sampling.glsl",
|
||||
R"(
|
||||
#ifndef INCLUDE_BUILTIN_SAMPLING
|
||||
#define INCLUDE_BUILTIN_SAMPLING
|
||||
|
||||
// kernel defined 9tap sampling
|
||||
// samper, uv, 1.0/textureSize(), kernel, sum of kernel
|
||||
vec3 sampling2D_kernel3x3_vec3(in sampler2D tex, in vec2 pos, in vec2 dir_step, in mat3x3 kernel, in float kernel_weight) {
|
||||
vec3 color =
|
||||
// upper row
|
||||
texture(tex, pos + dir_step * vec2(-1.0, 1.0)).rgb * kernel[0][0]
|
||||
+ texture(tex, pos + dir_step * vec2(0.0, 1.0)).rgb * kernel[0][1]
|
||||
+ texture(tex, pos + dir_step * vec2(1.0, 1.0)).rgb * kernel[0][2]
|
||||
|
||||
// middle row
|
||||
+ texture(tex, pos + dir_step * vec2(-1.0, 0.0)).rgb * kernel[1][0]
|
||||
+ texture(tex, pos).rgb * kernel[1][1]
|
||||
+ texture(tex, pos + dir_step * vec2(1.0, 0.0)).rgb * kernel[1][2]
|
||||
|
||||
// lower row
|
||||
+ texture(tex, pos + dir_step * vec2(-1.0, -1.0)).rgb * kernel[2][0]
|
||||
+ texture(tex, pos + dir_step * vec2(0.0, -1.0)).rgb * kernel[2][1]
|
||||
+ texture(tex, pos + dir_step * vec2(1.0, -1.0)).rgb * kernel[2][2]
|
||||
;
|
||||
|
||||
return color / vec3(kernel_weight);
|
||||
}
|
||||
|
||||
// 3x3 9tap tent filter
|
||||
// 1 2 1
|
||||
// 2 4 2
|
||||
// 1 2 1
|
||||
vec3 sampling2D_tent3x3_vec3(in sampler2D tex, in vec2 pos, in vec2 dir_step) {
|
||||
const mat3x3 tent_kernel = mat3x3(
|
||||
vec3(1.0, 2.0, 1.0),
|
||||
vec3(2.0, 4.0, 2.0),
|
||||
vec3(1.0, 2.0, 1.0)
|
||||
);
|
||||
const float tent_kernel_weight = 16.0;
|
||||
|
||||
return sampling2D_kernel3x3_vec3(
|
||||
tex,
|
||||
pos,
|
||||
dir_step,
|
||||
tent_kernel,
|
||||
tent_kernel_weight
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
)")
|
||||
// ==================== sampling.glsl ==================== END
|
||||
|
||||
// ==================== tonemapping.glsl ==================== START
|
||||
FS_CONST_MOUNT_FILE("/shaders/builtin/tonemapping.glsl",
|
||||
R"(
|
||||
#ifndef INCLUDE_BUILTIN_TONEMAPPING
|
||||
#define INCLUDE_BUILTIN_TONEMAPPING
|
||||
|
||||
// https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
|
||||
vec3 tonemapACESFilm(vec3 x) {
|
||||
const float a = 2.51;
|
||||
const float b = 0.03;
|
||||
const float c = 2.43;
|
||||
const float d = 0.59;
|
||||
const float e = 0.14;
|
||||
|
||||
return clamp((x*(a*x+b))/(x*(c*x+d)+e), vec3(0.0), vec3(1.0));
|
||||
}
|
||||
|
||||
vec3 tonemapReinhard(vec3 x) {
|
||||
return x / (x + vec3(1.0));
|
||||
}
|
||||
|
||||
#endif
|
||||
)")
|
||||
// ==================== tonemapping.glsl ==================== END
|
||||
}
|
||||
|
||||
} // MM::OpenGL
|
||||
|
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
namespace MM::OpenGL {
|
||||
|
||||
// loads glsl files into const fs at "/shaders/builtin/"
|
||||
// file list:
|
||||
// - sampling.glsl
|
||||
// - tonemapping.glsl
|
||||
void load_builtin_shaders_fs(void);
|
||||
|
||||
} // MM::OpenGL
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <mm/opengl/texture_loader.hpp>
|
||||
#include "../opengl/res/default_texture.h" // data
|
||||
#include "../opengl/res/errig_texture.h" // data
|
||||
#include "../opengl/res/shaders_builtin.hpp" // data-ish
|
||||
|
||||
#include <tracy/Tracy.hpp>
|
||||
#ifndef MM_OPENGL_3_GLES
|
||||
@ -111,7 +112,7 @@ bool OpenGLRenderer::enable(Engine& engine, std::vector<UpdateStrategies::TaskIn
|
||||
return false;
|
||||
}
|
||||
|
||||
{ // default texures
|
||||
{ // default textures
|
||||
auto& rm_t = MM::ResourceManager<MM::OpenGL::Texture>::ref();
|
||||
if (!rm_t.contains("default"_hs)) {
|
||||
if (!rm_t.load<MM::OpenGL::TextureLoaderConstBuffer>("default", default_png, default_png_len)) {
|
||||
@ -125,6 +126,10 @@ bool OpenGLRenderer::enable(Engine& engine, std::vector<UpdateStrategies::TaskIn
|
||||
}
|
||||
}
|
||||
|
||||
{ // builtin shaders
|
||||
OpenGL::load_builtin_shaders_fs();
|
||||
}
|
||||
|
||||
{ // add task
|
||||
task_array.push_back(
|
||||
UpdateStrategies::TaskInfo{"OpenGLRenderer::render"}
|
||||
|
Reference in New Issue
Block a user