diff --git a/neercs/term/term.cpp b/neercs/term/term.cpp index 3057f50..b451cc6 100644 --- a/neercs/term/term.cpp +++ b/neercs/term/term.cpp @@ -149,7 +149,6 @@ void Term::TickGame(float seconds) if (m_debug) { - m_time += seconds; DrawFancyShit(); } #else @@ -186,7 +185,7 @@ static uint32_t hex_color(float r, float g, float b) void Term::DrawFancyShit() { /* draw something awesome */ - int bg_color = 0x222; + int bg_color = 0x000; int w = caca_get_canvas_width(m_caca); int h = caca_get_canvas_height(m_caca); @@ -221,13 +220,9 @@ void Term::DrawFancyShit() int logo_y = h / 2 - 2; caca_set_color_argb(m_caca, 0xbac, bg_color); - //caca_set_color_argb(m_caca, hex_color(0.5f + 0.5f * lol::cos(m_time * 3 ), 0.5f, 0.5f + 0.25f * lol::sin(m_time * 3 )), bg_color); caca_put_str(m_caca, logo_x + 3, logo_y ,"__ _________ ______ ______ ______ ______"); - //caca_set_color_argb(m_caca, hex_color(0.5f + 0.5f * lol::cos(m_time * 3 + M_PI / 4 * 1), 0.5f, 0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 1)), bg_color); caca_put_str(m_caca, logo_x + 2, logo_y + 1, "/ \\/ / __ > __ > __ > ___// ___/ \x0a9"); - //caca_set_color_argb(m_caca, hex_color(0.5f + 0.5f * lol::cos(m_time * 3 + M_PI / 4 * 2), 0.5f, 0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 2)), bg_color); caca_put_str(m_caca, logo_x + 1, logo_y + 2, "/ / ____/ ____/ __ < <____\\___ \\"); - //caca_set_color_argb(m_caca, hex_color(0.5f + 0.5f * lol::cos(m_time * 3 + M_PI / 4 * 3), 0.5f, 0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 3)), bg_color); caca_put_str(m_caca, logo_x , logo_y + 3, "/__/\\__/\\_______________/ \\________________\\"); caca_set_color_argb(m_caca, 0x269, bg_color); caca_put_str(m_caca, logo_x + 5, logo_y + 5, "ALL YOUR TERMINALS ARE BELONG TO US"); @@ -246,22 +241,19 @@ void Term::DrawFancyShit() | :D | / |______|/ */ +/* + int lolcube_x = w - 12; + int lolcube_y = h - 8; - int lolcube_x = w / 2 - 5 + (w - 10) * lol::cos(m_time / 2); - int lolcube_y = h - 5 - abs ((h - 5) * lol::sin(m_time * 4)); - - caca_set_color_argb(m_caca, hex_color(0.5f + 0.5f * lol::sin(m_time * 2), 0.5f + 0.5f * lol::cos(m_time * 3), 0.5f + 0.5f * lol::sin(m_time * 5)), bg_color); + caca_set_color_argb(m_caca, 0x777, bg_color); caca_put_str(m_caca, lolcube_x + 2, lolcube_y , "_______"); caca_put_str(m_caca, lolcube_x + 1, lolcube_y + 1, "/ /|"); caca_put_str(m_caca, lolcube_x , lolcube_y + 2, "/______/ |"); caca_put_str(m_caca, lolcube_x , lolcube_y + 3, "| | |"); caca_put_str(m_caca, lolcube_x , lolcube_y + 4, "| :D | /"); caca_put_str(m_caca, lolcube_x , lolcube_y + 5, "|______|/"); +*/ caca_set_color_argb(m_caca, 0x777, bg_color); - caca_put_str(m_caca, 0, 0, "rez@lol:~/ sudo -s"); - caca_put_str(m_caca, 0, 1, "[sudo] password for rez:"); - caca_put_str(m_caca, 0, 2, "root@lol:~/ echo LOL"); - caca_put_str(m_caca, 0, 3, "LOL"); - caca_put_str(m_caca, 0, 4, "root@lol:~/"); -} + caca_put_str(m_caca, 0, 0, "rez@lol:~/code/neercs/"); +} \ No newline at end of file diff --git a/neercs/video/mirror.lolfx b/neercs/video/mirror.lolfx index 5c3093b..c30ec33 100644 --- a/neercs/video/mirror.lolfx +++ b/neercs/video/mirror.lolfx @@ -22,10 +22,10 @@ void main(void) vec3 s = texture2D(texture, p).xyz; vec3 c = vec3(0.0); - if(p.x < mirror.x) c += (texture2D(texture, vec2(mirror.x + (mirror.x - p.x) * mirror.w, p.y * (0.8 + 2.0 * p.x) + 0.1 - 1.0 * p.x)).xyz) * (mirror.z / mirror.x * p.x); - if(p.x > 1.0 - mirror.x) c += (texture2D(texture, vec2(- mirror.x - (mirror.x + p.x) * mirror.w, p.y * (0.8 + 2.0 * (1.0 - p.x)) + 0.1 - 1.0 * (1.0 - p.x))).xyz) * (mirror.z / mirror.x * (1.0 - p.x)); - if(p.y < mirror.y) c += (texture2D(texture, vec2(p.x * (0.8 + 2.0 * p.y) + 0.1 - 1.0 * p.y, mirror.y + (mirror.y - p.y) * mirror.w)).xyz) * (mirror.z / mirror.y * p.y); - if(p.y > 1.0 - mirror.y) c += (texture2D(texture, vec2(p.x * (0.8 + 2.0 * (1.0 - p.y)) + 0.1 - 1.0 * (1.0 - p.y), - mirror.y - (mirror.y + p.y) * mirror.w)).xyz) * (mirror.z / mirror.y * (1.0 - p.y)); + if(p.x < mirror.x) c += texture2D(texture, vec2(mirror.x + (mirror.x - p.x) * mirror.w, p.y * (0.8 + 2.0 * p.x) + 0.1 - 1.0 * p.x)).xyz * (mirror.z / mirror.x * p.x); + if(p.x > 1.0 - mirror.x) c += texture2D(texture, vec2(- mirror.x - (mirror.x + p.x) * mirror.w, p.y * (0.8 + 2.0 * (1.0 - p.x)) + 0.1 - 1.0 * (1.0 - p.x))).xyz * (mirror.z / mirror.x * (1.0 - p.x)); + if(p.y < mirror.y) c += texture2D(texture, vec2(p.x * (0.8 + 2.0 * p.y) + 0.1 - 1.0 * p.y, mirror.y + (mirror.y - p.y) * mirror.w)).xyz * (mirror.z / mirror.y * p.y); + if(p.y > 1.0 - mirror.y) c += texture2D(texture, vec2(p.x * (0.8 + 2.0 * (1.0 - p.y)) + 0.1 - 1.0 * (1.0 - p.y), - mirror.y - (mirror.y + p.y) * mirror.w)).xyz * (mirror.z / mirror.y * (1.0 - p.y)); gl_FragColor = vec4(s + c, 1.0); } \ No newline at end of file diff --git a/neercs/video/postfx.lolfx b/neercs/video/postfx.lolfx index a210a37..0045077 100644 --- a/neercs/video/postfx.lolfx +++ b/neercs/video/postfx.lolfx @@ -19,6 +19,7 @@ uniform float time; uniform vec2 deform; uniform vec4 ghost1; uniform vec4 ghost2; +uniform vec4 glass; uniform float vignetting; uniform float aberration; uniform vec4 moire_h; @@ -29,9 +30,9 @@ uniform vec3 corner; uniform float sync; uniform float beat; -vec2 screen(in vec2 p,in float radius) +vec2 screen(in vec2 p,in float bend,in float radius) { - float d=deform.x+sync*0.0625+beat*0.0375; + float d=bend+sync*0.0625+beat*0.0375; return p*(1.5-(radius*cos(p.x*d)+radius*cos(p.y*d)))-0.5; } @@ -50,18 +51,22 @@ void main(void) vec2 q=gl_FragCoord.xy/screen_size.xy; vec2 p=-1.0+2.0*gl_FragCoord.xy/screen_size.xy; p.y+=0.025*sync; - vec2 z=screen(p,deform.y); - vec2 z1=screen(p,deform.y+ghost1.z*0.01); - vec2 z2=screen(p,deform.y+ghost2.z*0.01); + vec2 z=screen(p,deform.x,deform.y); + vec2 z1=screen(p,deform.x,deform.y+ghost1.z); + vec2 z2=screen(p,deform.x,deform.y+ghost2.z); + vec2 z3=screen(p,glass.w,deform.y+glass.x-glass.y); + vec2 z4=screen(p,glass.w,deform.y+glass.x+glass.y); float mask=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0); vec3 source=get_color(texture,z); - vec3 g1=get_color(texture,z1-ghost1.xy*0.01); - vec3 g2=get_color(texture,z2-ghost2.xy*0.01); + vec3 g1=get_color(texture,z1-ghost1.xy); + vec3 g2=get_color(texture,z2-ghost2.xy); + vec3 g3=get_color(texture,z3); + vec3 g4=get_color(texture,z4); vec3 c=source+g1*ghost1.w+g2*ghost2.w; // mix - float v=aberration/float(screen_size.x/ratio_2d.x);//+aberration/float(screen_size.x)*(2.0-mask); + float v=aberration/float(screen_size.x/ratio_2d.x); //+aberration/float(screen_size.x)*(2.0-mask); vec3 ca1=get_color(texture,vec2(z.x-v,z.y)); vec3 ca2=get_color(texture,vec2(z.x+v,z.y)); c+=vec3(ca1.x,c.y,ca2.z); // chromatic aberration @@ -88,5 +93,6 @@ void main(void) c+=r*0.05; // reflection c*=mix(1.0,mask,vignetting); // vignetting c*=letterbox(z,corner.x+2.0,corner.y,corner.z); // corner + c+=(g3+g4)*glass.z; // glass gl_FragColor=vec4(c,1.0); } \ No newline at end of file diff --git a/neercs/video/render.cpp b/neercs/video/render.cpp index 90c1128..276a0e2 100644 --- a/neercs/video/render.cpp +++ b/neercs/video/render.cpp @@ -112,13 +112,14 @@ float postfx_vignetting = 0.5f; // vignetting strength float postfx_aberration = 4.0f; // chromatic aberration vec4 postfx_ghost1(1.0f,0.0f,0.0f,-0.25f); // ghost picture 1 [position x,position y,position z,strength] vec4 postfx_ghost2(1.5f,0.0f,0.0f,0.25f); // ghost picture 2 [position x,position y,position z,strength] +vec4 postfx_glass(8.0f,0.25f,0.75f,0.2f); // glass [depth,thickness,strength,deform ratio] vec4 postfx_moire_h(0.75f,-0.25f,0.0f,1.0f); // vertical moire [base,variable,repeat,shift] -vec4 postfx_moire_v(0.75f,-0.25f,1.0f,1.5f); // horizontal moire [base,variable,repeat,shift] +vec4 postfx_moire_v(0.75f,-0.25f,1.0f,2.0f); // horizontal moire [base,variable,repeat,shift] vec4 postfx_scanline_h(1.0f,0.0f,0.0f,0.0f); // vertical scanline [base,variable,repeat,shift] vec4 postfx_scanline_v(0.75f,-0.25f,2.0f,0.0f); // horizontal scanline [base,variable,repeat,shift] vec3 postfx_corner(0.0f,0.8f,0.96f); // corner [width,radius,blur] vec4 mirror(0.95f,0.9f,0.4f,4.0f); // mirror [width,height,strength,ratio] -vec4 radial(4.0f,0.9f,16,0.5f); // radial [distance,fade ratio,iteration,strength] +vec4 radial(4.0f,0.9f,16,0.25f); // radial [distance,fade ratio,iteration,strength] /* text variable */ ivec2 ratio_2d(2,3); // 2d ratio ivec2 map_size(256,256); // texture map size @@ -132,7 +133,7 @@ int setup_n = 0; // item/option number int setup_h = 8; // height int setup_cursor = 0; // cursor position int setup_option_i = 0; // selected option -int setup_option_n = 13; // option number +int setup_option_n = 14; // option number int setup_option_p = 0; // option position int setup_item_i = 0; // selected item int setup_item_n = 8; // item number @@ -223,6 +224,15 @@ char const *setup_text[] = { "front y", "front z", "front strength", + "glass", + "depth", + "thickness", + "strength", + "deform ratio", + "", + "", + "", + "", "moire", "h base", "h variable", @@ -343,6 +353,15 @@ vec4 setup_var[]={ // setup variable [start,end,step,value] vec4(-2.0f, 2.0f, 0.10f, postfx_ghost2.y), vec4(-2.0f, 2.0f, 0.10f, postfx_ghost2.z), vec4(-1.0f, 1.0f, 0.05f, postfx_ghost2.w), + vec4(0), /* glass */ + vec4(0.0f, 16.0f, 0.50f, postfx_glass.x), + vec4(0.0f, 1.0f, 0.05f, postfx_glass.y), + vec4(0.0f, 2.0f, 0.05f, postfx_glass.z), + vec4(0.0f, 1.0f, 0.05f, postfx_glass.w), + vec4(0), + vec4(0), + vec4(0), + vec4(0), vec4(0), /* moire */ vec4( 0.5f, 1.0f, 0.05f, postfx_moire_h.x), vec4(-0.5f, 0.5f, 0.05f, postfx_moire_h.y), @@ -420,7 +439,9 @@ void Render::UpdateVar() k += 2; /* ghost */ postfx_ghost1 = vec4(setup_var[k].w, setup_var[k + 1].w, setup_var[k + 2].w, setup_var[k + 3].w); k += 4; postfx_ghost2 = vec4(setup_var[k].w, setup_var[k + 1].w, setup_var[k + 2].w, setup_var[k + 3].w); k += 4; - k += 1; /* moire */ + k += 1; /* glass */ + postfx_glass = vec4(setup_var[k].w, setup_var[k + 1].w, setup_var[k + 2].w, setup_var[k + 3].w); k += 4; + k += 5; /* moire */ postfx_moire_h = vec4(setup_var[k].w, setup_var[k + 1].w, setup_var[k + 2].w, setup_var[k + 3].w); k += 4; postfx_moire_v = vec4(setup_var[k].w, setup_var[k + 1].w, setup_var[k + 2].w, setup_var[k + 3].w); k += 4; k += 1; /* scanline */ @@ -499,6 +520,7 @@ ShaderUniform shader_postfx_texture, shader_postfx_deform, shader_postfx_ghost1, shader_postfx_ghost2, + shader_postfx_glass, shader_postfx_vignetting, shader_postfx_aberration, shader_postfx_moire_h, @@ -600,6 +622,7 @@ int Render::InitDraw(void) shader_postfx_deform = shader_postfx->GetUniformLocation("deform"); shader_postfx_ghost1 = shader_postfx->GetUniformLocation("ghost1"); shader_postfx_ghost2 = shader_postfx->GetUniformLocation("ghost2"); + shader_postfx_glass = shader_postfx->GetUniformLocation("glass"); shader_postfx_vignetting = shader_postfx->GetUniformLocation("vignetting"); shader_postfx_aberration = shader_postfx->GetUniformLocation("aberration"); shader_postfx_moire_h = shader_postfx->GetUniformLocation("moire_h"); @@ -1309,8 +1332,9 @@ void Render::Draw3D() shader_postfx->SetUniform(shader_postfx_ratio_2d, (vec2)ratio_2d / 2); shader_postfx->SetUniform(shader_postfx_time, fx_angle); shader_postfx->SetUniform(shader_postfx_deform, postfx_deform); - shader_postfx->SetUniform(shader_postfx_ghost1, postfx_ghost1); - shader_postfx->SetUniform(shader_postfx_ghost2, postfx_ghost2); + shader_postfx->SetUniform(shader_postfx_ghost1, vec4(postfx_ghost1.x * 0.01, postfx_ghost1.y * 0.01, postfx_ghost1.z * 0.01, postfx_ghost1.w)); + shader_postfx->SetUniform(shader_postfx_ghost2, vec4(postfx_ghost2.x * 0.01, postfx_ghost2.y * 0.01, postfx_ghost2.z * 0.01, postfx_ghost2.w)); + shader_postfx->SetUniform(shader_postfx_glass, vec4(postfx_glass.x * 0.01, postfx_glass.y * 0.01, postfx_glass.z * 0.1, postfx_glass.w)); shader_postfx->SetUniform(shader_postfx_vignetting, postfx_vignetting); shader_postfx->SetUniform(shader_postfx_aberration, postfx_aberration); shader_postfx->SetUniform(shader_postfx_moire_h, postfx_moire_h);