preprocess shaders
parent
363ae843f4
commit
6f83b81132
|
@ -12,6 +12,10 @@ int main() {
|
||||||
|
|
||||||
// create camera
|
// create camera
|
||||||
camera_t cam = camera();
|
camera_t cam = camera();
|
||||||
|
|
||||||
|
// fx: load all post fx files in all subdirs.
|
||||||
|
fx_load("fx**.fs");
|
||||||
|
|
||||||
// load video, RGB texture, no audio
|
// load video, RGB texture, no audio
|
||||||
video_t *v = video( "pexels-pachon-in-motion-17486489.mp4", VIDEO_RGB | VIDEO_NO_AUDIO | VIDEO_LOOP ); video_seek(v, 30);
|
video_t *v = video( "pexels-pachon-in-motion-17486489.mp4", VIDEO_RGB | VIDEO_NO_AUDIO | VIDEO_LOOP ); video_seek(v, 30);
|
||||||
// load texture
|
// load texture
|
||||||
|
@ -60,6 +64,7 @@ int main() {
|
||||||
// load skybox
|
// load skybox
|
||||||
scene_get_active()->skybox = skybox_pbr("hdr/Tokyo_BigSight_1k.hdr","hdr/Tokyo_BigSight_Env.hdr");
|
scene_get_active()->skybox = skybox_pbr("hdr/Tokyo_BigSight_1k.hdr","hdr/Tokyo_BigSight_Env.hdr");
|
||||||
|
|
||||||
|
|
||||||
while(window_swap() && !input(KEY_ESC)) {
|
while(window_swap() && !input(KEY_ESC)) {
|
||||||
// draw environment
|
// draw environment
|
||||||
ddraw_grid(0);
|
ddraw_grid(0);
|
||||||
|
@ -71,7 +76,9 @@ int main() {
|
||||||
light_teleport(l, cam.position);
|
light_teleport(l, cam.position);
|
||||||
|
|
||||||
// draw scene
|
// draw scene
|
||||||
|
fx_begin();
|
||||||
scene_render(SCENE_FOREGROUND|SCENE_BACKGROUND|SCENE_UPDATE_SH_COEF);
|
scene_render(SCENE_FOREGROUND|SCENE_BACKGROUND|SCENE_UPDATE_SH_COEF);
|
||||||
|
fx_end();
|
||||||
|
|
||||||
// fps camera
|
// fps camera
|
||||||
bool active = ui_active() || ui_hover() || gizmo_active() ? false : input(MOUSE_L) || input(MOUSE_M) || input(MOUSE_R);
|
bool active = ui_active() || ui_hover() || gizmo_active() ? false : input(MOUSE_L) || input(MOUSE_M) || input(MOUSE_R);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#version 400
|
||||||
uniform mat4 model, view;
|
uniform mat4 model, view;
|
||||||
uniform sampler2D u_texture2d;
|
uniform sampler2D u_texture2d;
|
||||||
uniform vec3 u_coefficients_sh[9];
|
uniform vec3 u_coefficients_sh[9];
|
||||||
|
@ -139,10 +140,10 @@ uniform ColorMap map_emissive; uniform sampler2D map_emissive_tex;
|
||||||
#define sample_colormap(ColorMap_, uv_) \
|
#define sample_colormap(ColorMap_, uv_) \
|
||||||
(ColorMap_.has_tex ? texture( ColorMap_##_tex, uv_ ) : ColorMap_.color)
|
(ColorMap_.has_tex ? texture( ColorMap_##_tex, uv_ ) : ColorMap_.color)
|
||||||
|
|
||||||
uniform float skysphere_rotation;
|
uniform float skysphere_rotation=-90;
|
||||||
uniform float skysphere_mip_count;
|
uniform float skysphere_mip_count;
|
||||||
uniform float exposure=1;
|
uniform float exposure=1;
|
||||||
// uniform uint frame_count;
|
uniform uint frame_count;
|
||||||
uniform float specular_shininess;
|
uniform float specular_shininess;
|
||||||
|
|
||||||
uniform sampler2D tex_skysphere;
|
uniform sampler2D tex_skysphere;
|
||||||
|
@ -687,7 +688,7 @@ void main(void)
|
||||||
// float dither = random( uvec3( floatBitsToUint( gl_FragCoord.xy ), frame_count ) );
|
// float dither = random( uvec3( floatBitsToUint( gl_FragCoord.xy ), frame_count ) );
|
||||||
// color += BOOST_NOISE * vec3( (-1.0/256.) + (2./256.) * dither );
|
// color += BOOST_NOISE * vec3( (-1.0/256.) + (2./256.) * dither );
|
||||||
|
|
||||||
#if 0 // original
|
#if 1 // original
|
||||||
// basic tonemap and gamma correction
|
// basic tonemap and gamma correction
|
||||||
color = color / ( vec3(1.) + color );
|
color = color / ( vec3(1.) + color );
|
||||||
color = pow( color, vec3(1. / 2.2) );
|
color = pow( color, vec3(1. / 2.2) );
|
||||||
|
|
|
@ -370120,6 +370120,22 @@ unsigned shader(const char *vs, const char *fs, const char *attribs, const char
|
||||||
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
char *shader_preprocess(const char *src, const char *defines) {
|
||||||
|
const char *glsl_version = va("#version %s", ifdef(ems, "300 es", "150"));
|
||||||
|
|
||||||
|
if (!src) return NULL;
|
||||||
|
|
||||||
|
// detect GLSL version if set
|
||||||
|
if (src[0] == '#' && src[1] == 'v') {
|
||||||
|
const char *end = strstri(src, "\n");
|
||||||
|
glsl_version = va("%.*s", (int)(end-src), src);
|
||||||
|
src = end+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return va("%s\n%s\n%s", glsl_version, defines ? defines : "", src);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
||||||
PRINTF(/*"!"*/"Compiling shader\n");
|
PRINTF(/*"!"*/"Compiling shader\n");
|
||||||
|
|
||||||
|
@ -370130,12 +370146,10 @@ unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *glsl_version = ifdef(ems, "300 es", "400");
|
|
||||||
|
|
||||||
if(gs)
|
if(gs)
|
||||||
gs = gs && gs[0] == '#' && gs[1] == 'v' ? gs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, gs ? gs : "");
|
gs = shader_preprocess(gs, glsl_defines);
|
||||||
vs = vs && vs[0] == '#' && vs[1] == 'v' ? vs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, vs ? vs : "");
|
vs = shader_preprocess(vs, glsl_defines);
|
||||||
fs = fs && fs[0] == '#' && fs[1] == 'v' ? fs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, fs ? fs : "");
|
fs = shader_preprocess(fs, glsl_defines);
|
||||||
|
|
||||||
#if is(ems)
|
#if is(ems)
|
||||||
{
|
{
|
||||||
|
@ -373053,6 +373067,7 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view,
|
||||||
shader_texture( "tex_skyenv", m.sky_env );
|
shader_texture( "tex_skyenv", m.sky_env );
|
||||||
}
|
}
|
||||||
shader_texture( "tex_brdf_lut", brdf_lut() );
|
shader_texture( "tex_brdf_lut", brdf_lut() );
|
||||||
|
shader_uint( "frame_count", (unsigned)window_frame() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
|
|
|
@ -92,6 +92,22 @@ unsigned shader(const char *vs, const char *fs, const char *attribs, const char
|
||||||
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
char *shader_preprocess(const char *src, const char *defines) {
|
||||||
|
const char *glsl_version = va("#version %s", ifdef(ems, "300 es", "150"));
|
||||||
|
|
||||||
|
if (!src) return NULL;
|
||||||
|
|
||||||
|
// detect GLSL version if set
|
||||||
|
if (src[0] == '#' && src[1] == 'v') {
|
||||||
|
const char *end = strstri(src, "\n");
|
||||||
|
glsl_version = va("%.*s", (int)(end-src), src);
|
||||||
|
src = end+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return va("%s\n%s\n%s", glsl_version, defines ? defines : "", src);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
||||||
PRINTF(/*"!"*/"Compiling shader\n");
|
PRINTF(/*"!"*/"Compiling shader\n");
|
||||||
|
|
||||||
|
@ -102,12 +118,10 @@ unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *glsl_version = ifdef(ems, "300 es", "400");
|
|
||||||
|
|
||||||
if(gs)
|
if(gs)
|
||||||
gs = gs && gs[0] == '#' && gs[1] == 'v' ? gs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, gs ? gs : "");
|
gs = shader_preprocess(gs, glsl_defines);
|
||||||
vs = vs && vs[0] == '#' && vs[1] == 'v' ? vs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, vs ? vs : "");
|
vs = shader_preprocess(vs, glsl_defines);
|
||||||
fs = fs && fs[0] == '#' && fs[1] == 'v' ? fs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, fs ? fs : "");
|
fs = shader_preprocess(fs, glsl_defines);
|
||||||
|
|
||||||
#if is(ems)
|
#if is(ems)
|
||||||
{
|
{
|
||||||
|
@ -3025,6 +3039,7 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view,
|
||||||
shader_texture( "tex_skyenv", m.sky_env );
|
shader_texture( "tex_skyenv", m.sky_env );
|
||||||
}
|
}
|
||||||
shader_texture( "tex_brdf_lut", brdf_lut() );
|
shader_texture( "tex_brdf_lut", brdf_lut() );
|
||||||
|
shader_uint( "frame_count", (unsigned)window_frame() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
|
|
25
engine/v4k.c
25
engine/v4k.c
|
@ -17266,6 +17266,22 @@ unsigned shader(const char *vs, const char *fs, const char *attribs, const char
|
||||||
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
return shader_geom(NULL, vs, fs, attribs, fragcolor, defines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
char *shader_preprocess(const char *src, const char *defines) {
|
||||||
|
const char *glsl_version = va("#version %s", ifdef(ems, "300 es", "150"));
|
||||||
|
|
||||||
|
if (!src) return NULL;
|
||||||
|
|
||||||
|
// detect GLSL version if set
|
||||||
|
if (src[0] == '#' && src[1] == 'v') {
|
||||||
|
const char *end = strstri(src, "\n");
|
||||||
|
glsl_version = va("%.*s", (int)(end-src), src);
|
||||||
|
src = end+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return va("%s\n%s\n%s", glsl_version, defines ? defines : "", src);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) {
|
||||||
PRINTF(/*"!"*/"Compiling shader\n");
|
PRINTF(/*"!"*/"Compiling shader\n");
|
||||||
|
|
||||||
|
@ -17276,12 +17292,10 @@ unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *glsl_version = ifdef(ems, "300 es", "400");
|
|
||||||
|
|
||||||
if(gs)
|
if(gs)
|
||||||
gs = gs && gs[0] == '#' && gs[1] == 'v' ? gs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, gs ? gs : "");
|
gs = shader_preprocess(gs, glsl_defines);
|
||||||
vs = vs && vs[0] == '#' && vs[1] == 'v' ? vs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, vs ? vs : "");
|
vs = shader_preprocess(vs, glsl_defines);
|
||||||
fs = fs && fs[0] == '#' && fs[1] == 'v' ? fs : va("#version %s\n%s\n%s", glsl_version, glsl_defines, fs ? fs : "");
|
fs = shader_preprocess(fs, glsl_defines);
|
||||||
|
|
||||||
#if is(ems)
|
#if is(ems)
|
||||||
{
|
{
|
||||||
|
@ -20199,6 +20213,7 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view,
|
||||||
shader_texture( "tex_skyenv", m.sky_env );
|
shader_texture( "tex_skyenv", m.sky_env );
|
||||||
}
|
}
|
||||||
shader_texture( "tex_brdf_lut", brdf_lut() );
|
shader_texture( "tex_brdf_lut", brdf_lut() );
|
||||||
|
shader_uint( "frame_count", (unsigned)window_frame() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
|
|
Loading…
Reference in New Issue