Changeset 1458


Ignore:
Timestamp:
Jun 11, 2012, 11:56:50 PM (7 years ago)
Author:
sam
Message:

neercs: remove some unused variables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/neercs/video/render.cpp

    r1457 r1458  
    11//
    2 // Monsterz
    3 //
    4 // Copyright: (c) 2005-2012 Sam Hocevar <sam@hocevar.net>
    5 //   This program is free software; you can redistribute it and/or
    6 //   modify it under the terms of the Do What The Fuck You Want To
    7 //   Public License, Version 2, as published by Sam Hocevar. See
    8 //   http://sam.zoy.org/projects/COPYING.WTFPL for more details.
     2// Neercs
    93//
    104
     
    4539
    4640#define WIN32_LEAN_AND_MEAN
    47 #define DEBUG 1                                 // debug flag //#if defined(_DEBUG)
    48 #define SHADER 1                                // shader flag
    49 #define PI 3.1415926535f// pi
    50 #define PID PI/180.0f           // pi ratio
    51 #define CR 1.0f/256.0f  // color ratio
     41#define DEBUG 1           // debug flag //#if defined(_DEBUG)
     42#define SHADER 1          // shader flag
     43#define PI 3.1415926535f  // pi
     44#define PID PI/180.0f     // pi ratio
     45#define CR 1.0f/256.0f    // color ratio
    5246
    5347bool done=false;
    5448
    5549Timer *timer;
    56 float timer_global=0;
    57 float timer_global_previous=0;
    58 float timer_fps=0;
    59 float timer_fps_total=0;
    60 float timer_fps_average=0;
    61 float timer_fps_min=32768;
    62 float timer_fps_max=0;
    63 int frame_counter=0;
    6450
    6551//char *param=GetCommandLine();
    6652
    67 int keys[256];                                  // keyboard array
    68 int active=true;                                // window active flag
    69 bool fullscreen=DEBUG?false:true;       // fullscreen flag
    70 bool pause=false;                               // pause flag
    71 float nearplane=0.1f;           // nearplane
    72 float farplane=1000.0f; // farplane
    73 bool polygon=true;                      // polygon mode
    74 int polygon_fillmode=GL_FILL;// fill mode
    75 int ratio_2d=4;                                 // 2d ratio
    76 /* window variable                      */
    77 int base_w=800;                                 // base width
    78 int base_h=600;                                 // base height
    79 int window_w=base_w;            // width
    80 int window_h=base_h;            // height
    81 int screen_w;                                           // screen width
    82 int screen_h;                                           // screen height
    83 int window_color=32;            // color depth
    84 float screen_r;                                 // color red
    85 float screen_g;                                 // color green
    86 float screen_b;                                 // color blue
    87 /* object variable                      */
    88 float   main_angle;                             // main angle
    89 float   part_angle;                             // part angle
    90 float fx_angle;                                 // current angle
    91 /* liner variable                               */
    92 int car;                                                                // ascii code
    93 int car_cursor=126;                     // cursor ascii code
    94 int liner_length;                               // text length
    95 int liner_line_n;                               // line number
    96 int liner_line;                                 // line increment
    97 int liner_max;                                  // line max length
    98 int liner_i;                                            // char increment
    99 int liner_count;                                // counter
    100 /* text variable                                */
     53int keys[256];             // keyboard array
     54int active=true;           // window active flag
     55bool fullscreen=DEBUG?false:true;    // fullscreen flag
     56bool pause=false;          // pause flag
     57float nearplane=0.1f;      // nearplane
     58float farplane=1000.0f;    // farplane
     59bool polygon=true;         // polygon mode
     60int polygon_fillmode=GL_FILL; // fill mode
     61int ratio_2d=4;            // 2d ratio
     62/* window variable */
     63int base_w=800;            // base width
     64int base_h=600;            // base height
     65int window_w=base_w;       // width
     66int window_h=base_h;       // height
     67int screen_w;              // screen width
     68int screen_h;              // screen height
     69int window_color=32;       // color depth
     70float screen_r;            // color red
     71float screen_g;            // color green
     72float screen_b;            // color blue
     73/* object variable */
     74float main_angle;          // main angle
     75float part_angle;          // part angle
     76float fx_angle;            // current angle
     77/* liner variable */
     78int car;                   // ascii code
     79int car_cursor=126;        // cursor ascii code
     80int liner_length;          // text length
     81int liner_line_n;          // line number
     82int liner_line;            // line increment
     83int liner_max;             // line max length
     84int liner_i;               // char increment
     85int liner_count;           // counter
     86/* text variable */
    10187char *name="cacaShell";
    10288std::string txt("");
    103 /* fs_quad variable                     */
    104 float fs_quad_vtx[]={-1.0f,1.0f,0,1.0f,-1.0f,-1.0f,0,1.0f,1.0f,-1.0f,0,1.0f,1.0f,1.0f,0,1.0f};
    105 float fs_quad_tex[]={0,1.0f,0,0,1.0f,0,1.0f,1.0f};
    106 /* flash variable                               */
    107 bool flash_flag=false;  // flag
    108 float flash_angle=0;            // angle
    109 float flash_value=0;            // value
    110 float flash_speed;                      // speed
    111 /* fade variable                                */
    112 bool fade_flag=false;           // flag
    113 float fade_angle=0;                     // angle
    114 float fade_value=0;                     // value
    115 float fade_speed;                               // speed
    116 /* debug variable                               */
    117 bool debug_flag=false;  // flag
    118 int debug_x;                                            // position x
    119 int debug_y;                                            // position y
    120 int debug_w;                                            // width
    121 int debug_h;                                            // height
    122 int debug_vtx[8];                               // vertex array
    123 /* sync variable                                */
    124 bool sync_flag=false;           // flag
    125 float sync_angle=0;                     // angle
    126 float sync_value=0;                     // value
    127 float sync_speed;                               // speed
    128 /* beat variable                                */
    129 bool beat_flag=false;           // flag
    130 float beat_angle=0;                     // angle
    131 float beat_value=0;                     // value
    132 float beat_speed;                               // speed
    133 /* corner variable                      */
    134 const int corner_n=10;  // polygon number
    135 int corner_w=24;                                // radius
     89/* fs_quad variable */
     90float fs_quad_vtx[]={-1.0f, 1.0f, 0, 1.0f, -1.0f, -1.0f, 0, 1.0f, 1.0f, -1.0f, 0, 1.0f, 1.0f, 1.0f, 0, 1.0f};
     91float fs_quad_tex[]={0, 1.0f, 0, 0, 1.0f, 0, 1.0f, 1.0f};
     92/* flash variable */
     93bool flash_flag=false;     // flag
     94float flash_angle=0;       // angle
     95float flash_value=0;       // value
     96float flash_speed;         // speed
     97/* fade variable */
     98bool fade_flag=false;      // flag
     99float fade_angle=0;        // angle
     100float fade_value=0;        // value
     101float fade_speed;          // speed
     102/* debug variable */
     103bool debug_flag=false;     // flag
     104int debug_x;               // position x
     105int debug_y;               // position y
     106int debug_w;               // width
     107int debug_h;               // height
     108int debug_vtx[8];          // vertex array
     109/* sync variable */
     110bool sync_flag=false;      // flag
     111float sync_angle=0;        // angle
     112float sync_value=0;        // value
     113float sync_speed;          // speed
     114/* beat variable */
     115bool beat_flag=false;      // flag
     116float beat_angle=0;        // angle
     117float beat_value=0;        // value
     118float beat_speed;          // speed
     119/* corner variable */
     120const int corner_n=10;     // polygon number
     121int corner_w=24;           // radius
    136122int corner_vtx[corner_n*6];// vertex array
    137 /* dos variable                                 */
    138 bool dos_flag=false;            // flag
    139 int dos_w;                                                      // width
    140 int dos_h;                                                      // height
    141 int dos_m;                                                      // margin
    142 float dos_r;                                            // red value
    143 float dos_g;                                            // green value
    144 float dos_b;                                            // blue value
    145 int dos_vtx[8];                                 // vertex array
    146 int shell_vtx[8];                               // vertex array
    147 float shell_tex[]={1.0f,0.96875f,1.0f,1.0f,0.78125f,1.0f,0.78125f,0.96875f};
    148 /* keyboard variable            */
    149 int key_code=0;                                 // keyboard code
    150 /* common variable                      */
    151 int i,j,k,l;
    152 float x,y,z,w,h;
    153 float r,g,b,c;
    154 float value,angle,radius,scale,speed;
     123/* dos variable */
     124bool dos_flag=false;       // flag
     125int dos_w;                 // width
     126int dos_h;                 // height
     127int dos_m;                 // margin
     128float dos_r;               // red value
     129float dos_g;               // green value
     130float dos_b;               // blue value
     131int dos_vtx[8];            // vertex array
     132int shell_vtx[8];          // vertex array
     133float shell_tex[]={1.0f, 0.96875f, 1.0f, 1.0f, 0.78125f, 1.0f, 0.78125f, 0.96875f};
     134/* keyboard variable */
     135int key_code=0;            // keyboard code
     136/* common variable */
     137int i, j, k, l;
     138float x, y, z, w, h;
     139float r, g, b, c;
     140float value, angle, radius, scale, speed;
    155141TileSet *tex_map;
    156 /* shader variable                      */
     142/* shader variable */
    157143bool shader_flag=SHADER?true:false;
    158144bool shader_blur_flag=SHADER?true:false;
    159145bool shader_effect_flag=SHADER?true:false;
    160146bool shader_glow_flag=true;
    161 int glow_fbo_size=2;            // glow fbo size
    162 int glow_color;                                 // 0=color/1=alpha
    163 float glow_smoothstep;  // glow smoothstep value
    164 float glow_mix_ratio1;  // glow mixing ratio
    165 float glow_mix_ratio2;  // source mixing ratio
     147int glow_fbo_size=2;       // glow fbo size
     148int glow_color;            // 0=color/1=alpha
     149float glow_smoothstep;     // glow smoothstep value
     150float glow_mix_ratio1;     // glow mixing ratio
     151float glow_mix_ratio2;     // source mixing ratio
    166152bool shader_radial_flag=false;
    167153float radial_value1;
    168154float radial_value2;
    169 float radial_color;                     // color
     155float radial_color;        // color
    170156bool shader_postfx_flag=SHADER?true:false;
    171157bool postfx_scanline=true;
    172 float postfx_deform;            // deformation ratio
     158float postfx_deform;       // deformation ratio
    173159#if SHADER
    174160Shader* shader_simple;
     
    215201ShaderUniform shader_postfx_scanline;
    216202ShaderUniform shader_postfx_sync;
     203
    217204FrameBuffer *fbo_back;
    218205FrameBuffer *fbo_front;
     
    224211
    225212void init_viewport(int type)
    226         {
    227         glViewport(0,0,screen_w,screen_h);
    228         glMatrixMode(GL_PROJECTION);
    229         glLoadIdentity();
    230     mat4 proj = (type == 0) ? mat4::perspective(70,(float)(float)screen_w,(float)screen_h,nearplane,farplane) : mat4::ortho(0, screen_w, screen_h, 0);
     213{
     214    glViewport(0, 0, screen_w, screen_h);
     215    glMatrixMode(GL_PROJECTION);
     216    glLoadIdentity();
     217    mat4 proj = (type == 0) ? mat4::perspective(70, (float)(float)screen_w, (float)screen_h, nearplane, farplane) : mat4::ortho(0, screen_w, screen_h, 0);
    231218    glLoadMatrixf(&proj[0][0]);
    232         glMatrixMode(GL_MODELVIEW);
    233         }
     219    glMatrixMode(GL_MODELVIEW);
     220}
    234221
    235222#if SHADER
    236223void init_shader()
    237         {
    238         glDisable(GL_BLEND);
    239         glVertexPointer(4,GL_FLOAT,0,fs_quad_vtx);
    240         glTexCoordPointer(2,GL_FLOAT,0,fs_quad_tex);
    241         }
     224{
     225    glDisable(GL_BLEND);
     226    glVertexPointer(4, GL_FLOAT, 0, fs_quad_vtx);
     227    glTexCoordPointer(2, GL_FLOAT, 0, fs_quad_tex);
     228}
    242229
    243230void fs_quad()
    244         {
    245         glLoadIdentity();
    246         glDrawArrays(GL_QUADS,0,4);
    247         }
    248 
    249 void draw_shader_simple(FrameBuffer *fbo_output,int n)
    250         {
    251         shader_simple->Bind();
    252         shader_simple->SetTexture(shader_simple_texture,fbo_output->GetTexture(),n);
    253         fs_quad();
    254         shader_simple->Unbind();
    255         }
     231{
     232    glLoadIdentity();
     233    glDrawArrays(GL_QUADS, 0, 4);
     234}
     235
     236void draw_shader_simple(FrameBuffer *fbo_output, int n)
     237{
     238    shader_simple->Bind();
     239    shader_simple->SetTexture(shader_simple_texture, fbo_output->GetTexture(), n);
     240    fs_quad();
     241    shader_simple->Unbind();
     242}
    256243#endif
    257244
    258245void calc_txt()
    259         {
    260         liner_length=txt.length();
    261         liner_count=0;
    262         liner_line_n=0;
    263         liner_max=0;
    264         liner_i=0;
    265         for(i=0;i<liner_length;i++)
    266                 {
    267                 if((unsigned char)txt[i]!=13)
    268                         {
    269                         liner_i++;
    270                         }
    271                 else
    272                         {
    273                         if(liner_i>liner_max) liner_max=liner_i;
    274                         liner_line_n++;
    275                         liner_i=0;
    276                         }
    277                 }
    278         if(liner_i>liner_max) liner_max=liner_i;
    279         }
     246{
     247    liner_length=txt.length();
     248    liner_count=0;
     249    liner_line_n=0;
     250    liner_max=0;
     251    liner_i=0;
     252    for(i=0;i<liner_length;i++)
     253    {
     254        if((unsigned char)txt[i]!=13)
     255        {
     256            liner_i++;
     257        }
     258        else
     259        {
     260            if(liner_i>liner_max) liner_max=liner_i;
     261            liner_line_n++;
     262            liner_i=0;
     263        }
     264    }
     265    if(liner_i>liner_max) liner_max=liner_i;
     266}
    280267
    281268void flash()
    282         {
    283         flash_flag=true;
    284         flash_angle=main_angle;
    285         }
     269{
     270    flash_flag=true;
     271    flash_angle=main_angle;
     272}
    286273
    287274void fade()
    288         {
    289         fade_flag=true;
    290         fade_angle=main_angle;
    291         }
     275{
     276    fade_flag=true;
     277    fade_angle=main_angle;
     278}
    292279
    293280void sync()
    294         {
    295         sync_flag=true;
    296         sync_angle=main_angle;
    297         }
     281{
     282    sync_flag=true;
     283    sync_angle=main_angle;
     284}
    298285
    299286void beat()
    300         {
    301         beat_flag=true;
    302         beat_angle=main_angle;
    303         }
    304 
    305 void rectangle(int x,int y,int w,int h)
    306         {
    307         glLoadIdentity();
    308         glBegin(GL_QUADS);
    309                 glVertex2i(x+w,y  );
    310                 glVertex2i(x  ,y  );
    311                 glVertex2i(x  ,y+h);
    312                 glVertex2i(x+w,y+h);
    313         glEnd();
    314         }
     287{
     288    beat_flag=true;
     289    beat_angle=main_angle;
     290}
     291
     292void rectangle(int x, int y, int w, int h)
     293{
     294    glLoadIdentity();
     295    glBegin(GL_QUADS);
     296        glVertex2i(x+w, y  );
     297        glVertex2i(x  , y  );
     298        glVertex2i(x  , y+h);
     299        glVertex2i(x+w, y+h);
     300    glEnd();
     301}
    315302
    316303void corner()
    317         {
    318         float vertex[2+corner_n*2];
    319         vertex[0]=0;
    320         vertex[1]=0;
    321         for(i=1;i<corner_n+1;i++)
    322                 {
    323                 j=i*2;
    324                 float a=PID*90.0f/(corner_n-1)*(i-1);
    325                 vertex[j  ]=corner_w-corner_w*cosf(a);
    326                 vertex[j+1]=corner_w-corner_w*sinf(a);
    327                 }
    328         for(i=0;i<corner_n;i++)
    329                 {
    330                 j=i*6;
    331                 k=i*2;
    332                 corner_vtx[j  ]=(int)vertex[0];
    333                 corner_vtx[j+1]=(int)vertex[1];
    334                 corner_vtx[j+2]=(int)vertex[2+k];
    335                 corner_vtx[j+3]=(int)vertex[3+k];
    336                 corner_vtx[j+4]=(int)vertex[4+k];
    337                 corner_vtx[j+5]=(int)vertex[5+k];
    338                 }
    339         }
     304{
     305    float vertex[2+corner_n*2];
     306    vertex[0]=0;
     307    vertex[1]=0;
     308    for(i=1;i<corner_n+1;i++)
     309    {
     310        j=i*2;
     311        float a=PID*90.0f/(corner_n-1)*(i-1);
     312        vertex[j  ]=corner_w-corner_w*cosf(a);
     313        vertex[j+1]=corner_w-corner_w*sinf(a);
     314    }
     315    for(i=0;i<corner_n;i++)
     316    {
     317        j=i*6;
     318        k=i*2;
     319        corner_vtx[j  ]=(int)vertex[0];
     320        corner_vtx[j+1]=(int)vertex[1];
     321        corner_vtx[j+2]=(int)vertex[2+k];
     322        corner_vtx[j+3]=(int)vertex[3+k];
     323        corner_vtx[j+4]=(int)vertex[4+k];
     324        corner_vtx[j+5]=(int)vertex[5+k];
     325    }
     326}
    340327
    341328void screen()
    342         {
    343         part_angle=main_angle;
    344         dos_flag=true;
    345         dos_r=CR*48;
    346         dos_g=CR*56;
    347         dos_b=CR*64;
    348         screen_r=dos_r;
    349         screen_g=dos_g;
    350         screen_b=dos_b;
    351         txt="\rCopyright \x05e 2012 cacaShell v0.1\r ";
    352         calc_txt();
    353         /*-------------------------*/
    354         shader_effect_flag=true;
    355         shader_glow_flag=true;
    356         glow_color=1;
    357         glow_smoothstep=0;//.025f;
    358         glow_mix_ratio1=0.5f;
    359         glow_mix_ratio2=0.5f;
    360         shader_radial_flag=false;
    361         radial_value1=2.0f;
    362         radial_value2=0.8f;
    363         radial_color=0;
    364         postfx_deform=0.5f;
    365         /*-------------------------*/
    366         flash_speed=1.5f;
    367         fade_speed=0.2f;
    368         sync_flag=false;
    369         sync_value=1.0f;
    370         sync_speed=1.0f;
    371         beat_speed=2.0f;
    372         /*-------------------------*/
    373         glClearColor(screen_r,screen_g,screen_b,1.0f);
    374         }
     329{
     330    part_angle=main_angle;
     331    dos_flag=true;
     332    dos_r=CR*48;
     333    dos_g=CR*56;
     334    dos_b=CR*64;
     335    screen_r=dos_r;
     336    screen_g=dos_g;
     337    screen_b=dos_b;
     338    txt="\rCopyright \x05e 2012 cacaShell v0.1\r ";
     339    calc_txt();
     340    /*-------------------------*/
     341    shader_effect_flag=true;
     342    shader_glow_flag=true;
     343    glow_color=1;
     344    glow_smoothstep=0;//.025f;
     345    glow_mix_ratio1=0.5f;
     346    glow_mix_ratio2=0.5f;
     347    shader_radial_flag=false;
     348    radial_value1=2.0f;
     349    radial_value2=0.8f;
     350    radial_color=0;
     351    postfx_deform=0.5f;
     352    /*-------------------------*/
     353    flash_speed=1.5f;
     354    fade_speed=0.2f;
     355    sync_flag=false;
     356    sync_value=1.0f;
     357    sync_speed=1.0f;
     358    beat_speed=2.0f;
     359    /*-------------------------*/
     360    glClearColor(screen_r, screen_g, screen_b, 1.0f);
     361}
    375362
    376363int InitGL(void)
    377         {
    378         glClearDepth(1.0f);                                                             // set depth buffer
    379         glDepthMask(GL_TRUE);                                                   // do not write z-buffer
    380         glEnable(GL_CULL_FACE);                                         // disable cull face
    381         glCullFace(GL_BACK);                                                    // don't draw front face
    382         glEnableClientState(GL_VERTEX_ARRAY);
    383         glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    384         // load texture
    385         tex_map=new TileSet("neercs/video/resource/map.bmp", ivec2(256, 256), ivec2(1));
    386         // initialize some variable
    387         timer=new Timer();
    388         screen();
    389         /*-PATACODE----------------------------------------------------------------*/
    390         #if SHADER
    391         if(shader_flag)
    392                 {
    393                         fbo_back=new FrameBuffer(ivec2(screen_w,screen_h));
    394                         fbo_front=new FrameBuffer(ivec2(screen_w,screen_h));
    395                         fbo_blur_h=new FrameBuffer(ivec2(screen_w/glow_fbo_size,screen_h/glow_fbo_size));
    396                         fbo_blur_v=new FrameBuffer(ivec2(screen_w/glow_fbo_size,screen_h/glow_fbo_size));
    397                         fbo_ping=new FrameBuffer(ivec2(screen_w,screen_h));
    398                         fbo_pong=new FrameBuffer(ivec2(screen_w,screen_h));
    399                         // shader simple
    400                         shader_simple=Shader::Create(lolfx_simple);
    401                         shader_simple_texture=shader_simple->GetUniformLocation("texture");
    402                         // shader blur horizontal
    403                         shader_blur_h=Shader::Create(lolfx_blurh);
    404                         shader_blur_h_texture=shader_blur_h->GetUniformLocation("texture");
    405                         shader_blur_h_screen_w=shader_blur_h->GetUniformLocation("screen_w");
    406                         shader_blur_h_screen_h=shader_blur_h->GetUniformLocation("screen_h");
    407                         shader_blur_h_time=shader_blur_h->GetUniformLocation("time");
    408                         shader_blur_h_value=shader_blur_h->GetUniformLocation("value");
    409                         // shader blur vertical
    410                         shader_blur_v=Shader::Create(lolfx_blurv);
    411                         shader_blur_v_texture=shader_blur_v->GetUniformLocation("texture");
    412                         shader_blur_v_screen_w=shader_blur_v->GetUniformLocation("screen_w");
    413                         shader_blur_v_screen_h=shader_blur_v->GetUniformLocation("screen_h");
    414                         shader_blur_v_time=shader_blur_v->GetUniformLocation("time");
    415                         shader_blur_v_value=shader_blur_v->GetUniformLocation("value");
    416                         // shader glow
    417                         shader_glow=Shader::Create(lolfx_glow);
    418                         shader_glow_texture=shader_glow->GetUniformLocation("texture");
    419                         shader_glow_texture_prv=shader_glow->GetUniformLocation("texture_prv");
    420                         shader_glow_screen_w=shader_glow->GetUniformLocation("screen_w");
    421                         shader_glow_screen_h=shader_glow->GetUniformLocation("screen_h");
    422                         shader_glow_time=shader_glow->GetUniformLocation("time");
    423                         shader_glow_step=shader_glow->GetUniformLocation("step");
    424                         shader_glow_value1=shader_glow->GetUniformLocation("value1");
    425                         shader_glow_value2=shader_glow->GetUniformLocation("value2");
    426                         // shader radial
    427                         shader_radial=Shader::Create(lolfx_radial);
    428                         shader_radial_texture=shader_radial->GetUniformLocation("texture");
    429                         shader_radial_screen_w=shader_radial->GetUniformLocation("screen_w");
    430                         shader_radial_screen_h=shader_radial->GetUniformLocation("screen_h");
    431                         shader_radial_time=shader_radial->GetUniformLocation("time");
    432                         shader_radial_value1=shader_radial->GetUniformLocation("value1");
    433                         shader_radial_value2=shader_radial->GetUniformLocation("value2");
    434                         shader_radial_color=shader_radial->GetUniformLocation("color");
    435                         // shader postfx
    436                         shader_postfx=Shader::Create(lolfx_postfx);
    437                         shader_postfx_texture=shader_postfx->GetUniformLocation("texture");
    438                         shader_postfx_texture_2d=shader_postfx->GetUniformLocation("texture_2d");
    439                         shader_postfx_screen_w=shader_postfx->GetUniformLocation("screen_w");
    440                         shader_postfx_screen_h=shader_postfx->GetUniformLocation("screen_h");
    441                         shader_postfx_time=shader_postfx->GetUniformLocation("time");
    442                         shader_postfx_flash=shader_postfx->GetUniformLocation("flash");
    443                         shader_postfx_value=shader_postfx->GetUniformLocation("value");
    444                         shader_postfx_deform=shader_postfx->GetUniformLocation("deform");
    445                         shader_postfx_scanline=shader_postfx->GetUniformLocation("scanline");
    446                         shader_postfx_sync=shader_postfx->GetUniformLocation("sync");
    447                         }
    448         #endif
    449         /*-/PATACODE---------------------------------------------------------------*/
    450         return true;
    451         }
     364{
     365    glClearDepth(1.0f);                                // set depth buffer
     366    glDepthMask(GL_TRUE);                            // do not write z-buffer
     367    glEnable(GL_CULL_FACE);                        // disable cull face
     368    glCullFace(GL_BACK);                            // don't draw front face
     369    glEnableClientState(GL_VERTEX_ARRAY);
     370    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     371    // load texture
     372     tex_map=new TileSet("neercs/video/resource/map.bmp", ivec2(256, 256), ivec2(1));
     373    // initialize some variable
     374    timer=new Timer();
     375    screen();
     376    /*-PATACODE----------------------------------------------------------------*/
     377    #if SHADER
     378    if(shader_flag)
     379    {
     380            fbo_back=new FrameBuffer(ivec2(screen_w, screen_h));
     381            fbo_front=new FrameBuffer(ivec2(screen_w, screen_h));
     382            fbo_blur_h=new FrameBuffer(ivec2(screen_w/glow_fbo_size, screen_h/glow_fbo_size));
     383            fbo_blur_v=new FrameBuffer(ivec2(screen_w/glow_fbo_size, screen_h/glow_fbo_size));
     384            fbo_ping=new FrameBuffer(ivec2(screen_w, screen_h));
     385            fbo_pong=new FrameBuffer(ivec2(screen_w, screen_h));
     386            // shader simple
     387            shader_simple=Shader::Create(lolfx_simple);
     388            shader_simple_texture=shader_simple->GetUniformLocation("texture");
     389            // shader blur horizontal
     390            shader_blur_h=Shader::Create(lolfx_blurh);
     391            shader_blur_h_texture=shader_blur_h->GetUniformLocation("texture");
     392            shader_blur_h_screen_w=shader_blur_h->GetUniformLocation("screen_w");
     393            shader_blur_h_screen_h=shader_blur_h->GetUniformLocation("screen_h");
     394            shader_blur_h_time=shader_blur_h->GetUniformLocation("time");
     395            shader_blur_h_value=shader_blur_h->GetUniformLocation("value");
     396            // shader blur vertical
     397            shader_blur_v=Shader::Create(lolfx_blurv);
     398            shader_blur_v_texture=shader_blur_v->GetUniformLocation("texture");
     399            shader_blur_v_screen_w=shader_blur_v->GetUniformLocation("screen_w");
     400            shader_blur_v_screen_h=shader_blur_v->GetUniformLocation("screen_h");
     401            shader_blur_v_time=shader_blur_v->GetUniformLocation("time");
     402            shader_blur_v_value=shader_blur_v->GetUniformLocation("value");
     403            // shader glow
     404            shader_glow=Shader::Create(lolfx_glow);
     405            shader_glow_texture=shader_glow->GetUniformLocation("texture");
     406            shader_glow_texture_prv=shader_glow->GetUniformLocation("texture_prv");
     407            shader_glow_screen_w=shader_glow->GetUniformLocation("screen_w");
     408            shader_glow_screen_h=shader_glow->GetUniformLocation("screen_h");
     409            shader_glow_time=shader_glow->GetUniformLocation("time");
     410            shader_glow_step=shader_glow->GetUniformLocation("step");
     411            shader_glow_value1=shader_glow->GetUniformLocation("value1");
     412            shader_glow_value2=shader_glow->GetUniformLocation("value2");
     413            // shader radial
     414            shader_radial=Shader::Create(lolfx_radial);
     415            shader_radial_texture=shader_radial->GetUniformLocation("texture");
     416            shader_radial_screen_w=shader_radial->GetUniformLocation("screen_w");
     417            shader_radial_screen_h=shader_radial->GetUniformLocation("screen_h");
     418            shader_radial_time=shader_radial->GetUniformLocation("time");
     419            shader_radial_value1=shader_radial->GetUniformLocation("value1");
     420            shader_radial_value2=shader_radial->GetUniformLocation("value2");
     421            shader_radial_color=shader_radial->GetUniformLocation("color");
     422            // shader postfx
     423            shader_postfx=Shader::Create(lolfx_postfx);
     424            shader_postfx_texture=shader_postfx->GetUniformLocation("texture");
     425            shader_postfx_texture_2d=shader_postfx->GetUniformLocation("texture_2d");
     426            shader_postfx_screen_w=shader_postfx->GetUniformLocation("screen_w");
     427            shader_postfx_screen_h=shader_postfx->GetUniformLocation("screen_h");
     428            shader_postfx_time=shader_postfx->GetUniformLocation("time");
     429            shader_postfx_flash=shader_postfx->GetUniformLocation("flash");
     430            shader_postfx_value=shader_postfx->GetUniformLocation("value");
     431            shader_postfx_deform=shader_postfx->GetUniformLocation("deform");
     432            shader_postfx_scanline=shader_postfx->GetUniformLocation("scanline");
     433            shader_postfx_sync=shader_postfx->GetUniformLocation("sync");
     434        }
     435    #endif
     436    /*-/PATACODE---------------------------------------------------------------*/
     437    return true;
     438}
    452439
    453440int DrawGLScene(void) // draw scene
    454         {
    455         frame_counter++;
    456         // timer
    457         timer_global_previous=timer_global;
    458         timer_global+=timer->Get();
    459         if(!pause) main_angle=timer_global*100.0f*PID;
    460         timer_fps=1.0f/(timer_global-timer_global_previous);
    461         if(timer_fps<0) timer_fps=0;
    462         if(timer_fps>1000) timer_fps=0;
    463         timer_fps_total+=timer_fps;
    464         timer_fps_average=timer_fps_total/frame_counter;
    465         if(timer_fps<timer_fps_min) timer_fps_min=timer_fps;
    466         if(timer_fps>timer_fps_max) timer_fps_max=timer_fps;
    467         if(sync_flag)
    468                 {
    469                 angle=(main_angle-sync_angle)*sync_speed;
    470                 sync_value=1.0f-sinf(angle);
    471                 if(angle>90.0f*PID)
    472                         {
    473                         sync_value=0;
    474                         sync_flag=false;
    475                         }
    476                 }
    477         if(beat_flag)
    478                 {
    479                 angle=(main_angle-beat_angle)*beat_speed;
    480                 beat_value=1.0f-sinf(angle);
    481                 if(angle>90.0f*PID)
    482                         {
    483                         beat_value=0;
    484                         beat_flag=false;
    485                         }
    486                 }
    487         if(flash_flag)
    488                 {
    489                 angle=(main_angle-flash_angle)*flash_speed;
    490                 flash_value=1.0f-sinf(angle);
    491                 if(angle>90.0f*PID)
    492                         {
    493                         flash_value=0;
    494                         flash_flag=false;
    495                         }
    496                 }
    497         if(fade_flag)
    498                 {
    499                 angle=(main_angle-fade_angle)*fade_speed;
    500                 fade_value=1.0f-sinf(angle);
    501                 if(angle>90.0f*PID)
    502                         {
    503                         fade_value=0;
    504                         fade_flag=false;
    505                         }
    506                 }
    507         /*-PATACODE----------------------------------------------------------------*/
    508         #if SHADER
    509         if(shader_flag)
    510                 {
    511                 fbo_back->Bind();
    512                 fbo_back->Clear(vec4(screen_r,screen_g,screen_b,0.0f),1.0f);
    513                 }
    514         else
    515                 {
    516                 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    517                 }
    518         #else
    519         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    520         #endif
    521         /*-/PATACODE---------------------------------------------------------------*/
    522         glEnable(GL_BLEND);
    523         //if(polygon) glEnable(GL_LINE_SMOOTH); else glDisable(GL_LINE_SMOOTH);
    524         glLineWidth((polygon)?2.0f:1.0f);
    525         fx_angle=main_angle-part_angle;
    526         if(polygon) glEnable(GL_TEXTURE_2D);
    527         /* .-------------------. */
    528         /* | DRAW SOME 2D HERE | */
    529         /* °-------------------° */
    530         init_viewport(1);
     441{
     442    // timer
     443    if(!pause) main_angle += timer->Get() * 100.0f * PID;
     444    if(sync_flag)
     445    {
     446        angle=(main_angle-sync_angle)*sync_speed;
     447        sync_value=1.0f-sinf(angle);
     448        if(angle>90.0f*PID)
     449        {
     450            sync_value=0;
     451            sync_flag=false;
     452        }
     453    }
     454    if(beat_flag)
     455    {
     456        angle=(main_angle-beat_angle)*beat_speed;
     457        beat_value=1.0f-sinf(angle);
     458        if(angle>90.0f*PID)
     459        {
     460            beat_value=0;
     461            beat_flag=false;
     462        }
     463    }
     464    if(flash_flag)
     465    {
     466        angle=(main_angle-flash_angle)*flash_speed;
     467        flash_value=1.0f-sinf(angle);
     468        if(angle>90.0f*PID)
     469        {
     470            flash_value=0;
     471            flash_flag=false;
     472        }
     473    }
     474    if(fade_flag)
     475    {
     476        angle=(main_angle-fade_angle)*fade_speed;
     477        fade_value=1.0f-sinf(angle);
     478        if(angle>90.0f*PID)
     479        {
     480            fade_value=0;
     481            fade_flag=false;
     482        }
     483    }
     484    /*-PATACODE----------------------------------------------------------------*/
     485    #if SHADER
     486    if(shader_flag)
     487    {
     488        fbo_back->Bind();
     489        fbo_back->Clear(vec4(screen_r, screen_g, screen_b, 0.0f), 1.0f);
     490    }
     491    else
     492    {
     493        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     494    }
     495    #else
     496    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     497    #endif
     498    /*-/PATACODE---------------------------------------------------------------*/
     499    glEnable(GL_BLEND);
     500    //if(polygon) glEnable(GL_LINE_SMOOTH); else glDisable(GL_LINE_SMOOTH);
     501    glLineWidth((polygon)?2.0f:1.0f);
     502    fx_angle=main_angle-part_angle;
     503    if(polygon) glEnable(GL_TEXTURE_2D);
     504    /* .-------------------. */
     505    /* | DRAW SOME 2D HERE | */
     506    /* °-------------------° */
     507    init_viewport(1);
    531508    tex_map->Bind();
    532         glEnable(GL_BLEND);
    533         // draw dos
    534         if(dos_flag)
    535                 {
    536                 glDisable(GL_TEXTURE_2D);
    537                 glDisable(GL_BLEND);
    538                 glColor3f(1.0f,1.0f,1.0f);
    539                 rectangle(dos_m,dos_m,screen_w-(int)(26.5f*ratio_2d)-dos_m*2,10*ratio_2d);
    540                 rectangle(screen_w-(int)(25.5f*ratio_2d)-dos_m,dos_m,11*ratio_2d,10*ratio_2d);
    541                 rectangle(screen_w-(int)(13.5f*ratio_2d)-dos_m,dos_m,11*ratio_2d,10*ratio_2d);
    542                 rectangle(screen_w-(int)(1.5f*ratio_2d)-dos_m,dos_m,(int)(1.5f*ratio_2d),10*ratio_2d);
    543                 rectangle(dos_m,dos_m+10*ratio_2d,1*ratio_2d,screen_h-10*ratio_2d-dos_m*2);
    544                 rectangle(screen_w-1*ratio_2d-dos_m,dos_m+10*ratio_2d,1*ratio_2d,screen_h-10*ratio_2d-dos_m*2);
    545                 rectangle(dos_m+1*ratio_2d,screen_h-1*ratio_2d-dos_m,screen_w-2*ratio_2d-dos_m*2,1*ratio_2d);
    546                 glColor3f(dos_r,dos_g,dos_b);
    547                 rectangle(dos_m+1*ratio_2d,dos_m+1*ratio_2d,28*ratio_2d,8*ratio_2d);
    548                 rectangle(dos_m+(int)(30.5f*ratio_2d),dos_m+2*ratio_2d,screen_w-(int)(58.5f*ratio_2d)-dos_m*2,2*ratio_2d);
    549                 rectangle(dos_m+(int)(30.5f*ratio_2d),dos_m+6*ratio_2d,screen_w-(int)(58.5f*ratio_2d)-dos_m*2,2*ratio_2d);
    550                 rectangle(screen_w-(int)(24.5f*ratio_2d)-dos_m,dos_m+1*ratio_2d,7*ratio_2d,6*ratio_2d);
    551                 glColor3f(1.0f,1.0f,1.0f);
    552                 rectangle(screen_w-(int)(23.5f*ratio_2d)-dos_m,dos_m+2*ratio_2d,5*ratio_2d,4*ratio_2d);
    553                 glColor3f(0,0,0);
    554                 rectangle(screen_w-(int)(22.5f*ratio_2d)-dos_m,dos_m+3*ratio_2d,7*ratio_2d,6*ratio_2d);
    555                 rectangle(screen_w-(int)(12.5f*ratio_2d)-dos_m,dos_m+1*ratio_2d,7*ratio_2d,6*ratio_2d);
    556                 glColor3f(dos_r,dos_g,dos_b);
    557                 rectangle(screen_w-(int)(10.5f*ratio_2d)-dos_m,dos_m+2*ratio_2d,7*ratio_2d,7*ratio_2d);
    558                 glColor3f(1.0f,1.0f,1.0f);
    559                 rectangle(screen_w-(int)(9.5f*ratio_2d)-dos_m,dos_m+3*ratio_2d,5*ratio_2d,5*ratio_2d);
    560                 rectangle(screen_w-8*ratio_2d-dos_m,screen_h-9*ratio_2d-dos_m,7*ratio_2d,8*ratio_2d);
    561                 glColor3f(dos_r,dos_g,dos_b);
    562                 rectangle(screen_w-7*ratio_2d-dos_m,screen_h-8*ratio_2d-dos_m,6*ratio_2d,7*ratio_2d);
    563                 glColor3f(1.0f,1.0f,1.0f);
    564                 rectangle(screen_w-4*ratio_2d-dos_m,screen_h-8*ratio_2d-dos_m,4*ratio_2d,2*ratio_2d);
    565                 rectangle(screen_w-7*ratio_2d-dos_m,screen_h-5*ratio_2d-dos_m,2*ratio_2d,5*ratio_2d);
    566                 rectangle(screen_w-6*ratio_2d-dos_m,screen_h-7*ratio_2d-dos_m,1*ratio_2d,1*ratio_2d);
    567                 rectangle(screen_w-4*ratio_2d-dos_m,screen_h-5*ratio_2d-dos_m,2*ratio_2d,3*ratio_2d);
    568                 glEnable(GL_BLEND);
    569                 if(polygon) glEnable(GL_TEXTURE_2D);
    570                 glBlendFunc(GL_ONE,GL_ONE);
    571                 glVertexPointer(2,GL_INT,0,shell_vtx);
    572                 glTexCoordPointer(2,GL_FLOAT,0,shell_tex);
    573                 glDrawArrays(GL_QUADS,0,4);
    574                 // draw dos text
    575                 glVertexPointer(2,GL_INT,0,dos_vtx);
    576                 j=0;
    577                 liner_line=-1;
    578                 for(i=1;i<liner_length+1;i++)
    579                         {
    580                         j++;
    581                         car=(unsigned char)txt[i-1];
    582                         if(i==liner_length) car=car_cursor;
    583                         if(car>32)
    584                                 {
    585                                 glLoadIdentity();
    586                                 glTranslated(x+j*(dos_w+2*ratio_2d),y,0);
    587                                 float l_w=(car%16)*0.03125f;
    588                                 float l_h=(car-car%16)*0.001953125f;
    589                                 float dos_tex[]={l_w+0.03125f,0.5f-l_h-0.03125f,l_w+0.03125f,0.5f-l_h,l_w,0.5f-l_h,l_w,0.5f-l_h-0.03125f};
    590                                 glTexCoordPointer(2,GL_FLOAT,0,dos_tex);
    591                                 if(car==car_cursor) glColor3f(CR*(dos_r+64),CR*(dos_g+48),CR*(dos_b+48));
    592                                 glDrawArrays(GL_QUADS,0,4);
    593                                 if(car==car_cursor) glColor3f(1.0f,1.0f,1.0f);
    594                                 }
    595                         if(car==13)
    596                                 {
    597                                 j=0;
    598                                 liner_line++;
    599                                 x=dos_m;
    600                                 y=dos_m+(float)(15*ratio_2d+liner_line*(dos_h+4*ratio_2d));
    601                                 if(y+dos_h>screen_h-dos_m) break;
    602                                 }
    603                         }
    604                 }
    605         // draw debug
    606         //#if DEBUG
    607         if(debug_flag)
    608                 {
    609                 char debug[512];
    610                 sprintf(debug,"width=%d\rheight=%d\rratio=%dx\rfps=%3.1f\raverage=%3.1f\rfps min=%3.1f\rfps max=%3.1f\rbeat=%-02.1f\rsync=%-02.1f\rkey code=%03d\r",screen_w,screen_h,ratio_2d,timer_fps,timer_fps_average,timer_fps_min,timer_fps_max,beat_value,sync_value,key_code);
    611                 float l_v=0.0390625f;
    612                 float l_j=0.001953125f;
    613                 glVertexPointer(2,GL_INT,0,debug_vtx);
    614                 glLoadIdentity();
    615                 glBlendFunc(GL_ONE,GL_ONE);
    616                 glColor3f(0.625f,0.25f,0.0f);
    617                 glTranslated(debug_x,debug_y,0);
    618                 j=0;
    619                 for(i=0;i<(int)strlen(debug);i++)
    620                         {
    621                         j++;
    622                         car=(unsigned char)debug[i];
    623                         if(car==13)
    624                                 {
    625                                 glTranslated(-j*(debug_w-ratio_2d)*2,(debug_h-ratio_2d)*2,0);
    626                                 j=0;
    627                                 }
    628                         glTranslated((debug_w-ratio_2d)*2,0,0);
    629                         if(car>32)
    630                                 {
    631                                 float l_w=(car%16)*0.03515625f;
    632                                 float l_h=(car-car%16)*0.00244140625f;
    633                                 float debug_tex[]={l_w+l_v-l_j,1.0f-l_h-l_v,l_w+l_v-l_j,1.0f-l_h,l_w-l_j,1.0f-l_h,l_w-l_j,1.0f-l_h-l_v};
    634                                 glTexCoordPointer(2,GL_FLOAT,0,debug_tex);
    635                                 glDrawArrays(GL_QUADS,0,4);
    636                                 }
    637                         }
    638                 }
    639         //#endif
    640         // draw corner
    641         glDisable(GL_TEXTURE_2D);
    642         glDisable(GL_BLEND);
    643         glVertexPointer(2,GL_INT,0,corner_vtx);
    644         glLoadIdentity();
    645         glColor3f(0,0,0);
    646         glDrawArrays(GL_TRIANGLES,0,corner_n*3);
    647         glTranslated(screen_w,0,0);
    648         glRotated(90.0f,0,0,1.0f);
    649         glDrawArrays(GL_TRIANGLES,0,corner_n*3);
    650         glTranslated(screen_h,0,0);
    651         glRotated(90.0f,0,0,1.0f);
    652         glDrawArrays(GL_TRIANGLES,0,corner_n*3);
    653         glTranslated(screen_w,0,0);
    654         glRotated(90.0f,0,0,1.0f);
    655         glDrawArrays(GL_TRIANGLES,0,corner_n*3);
    656         glEnable(GL_BLEND);
    657         /* .-------------------. */
    658         /* | DRAW SOME 3D HERE | */
    659         /* °-------------------° */
    660         //init_viewport(0);
    661         /*-PATACODE----------------------------------------------------------------*/
    662         #if SHADER
    663         if(shader_flag)
    664                 {
    665                 init_shader();
    666                 fbo_back->Unbind();
    667                 if(shader_effect_flag&&shader_blur_flag)
    668                         {
    669                         // shader blur horizontal
    670                         fbo_ping->Bind();
    671                         shader_blur_h->Bind();
    672                         shader_blur_h->SetTexture(shader_blur_h_texture,fbo_back->GetTexture(),0);
    673                         shader_blur_h->SetUniform(shader_blur_h_screen_w,1.0f);
    674                         shader_blur_h->SetUniform(shader_blur_h_screen_h,1.0f);
    675                         shader_blur_h->SetUniform(shader_blur_h_time,fx_angle);
    676                         shader_blur_h->SetUniform(shader_blur_h_value,0.5f/screen_w);
    677                         fs_quad();
    678                         shader_blur_h->Unbind();
    679                         fbo_ping->Unbind();
    680                         // shader blur vertical
    681                         fbo_front->Bind();
    682                         shader_blur_v->Bind();
    683                         shader_blur_v->SetTexture(shader_blur_v_texture,fbo_ping->GetTexture(),0);
    684                         shader_blur_v->SetUniform(shader_blur_v_screen_w,1.0f);
    685                         shader_blur_v->SetUniform(shader_blur_v_screen_h,1.0f);
    686                         shader_blur_v->SetUniform(shader_blur_v_time,fx_angle);
    687                         shader_blur_v->SetUniform(shader_blur_v_value,0.5f/screen_h);
    688                         fs_quad();
    689                         shader_blur_v->Unbind();
    690                         }
    691                 else
    692                         {
    693                         // shader simple
    694                         fbo_front->Bind();
    695                         draw_shader_simple(fbo_back,0);
    696                         }
    697                 fbo_front->Unbind();
    698                 // shader glow
    699                 if(shader_effect_flag&&shader_glow_flag)
    700                         {
    701                         // shader blur horizontal
    702                         fbo_blur_h->Bind();
    703                         shader_blur_h->Bind();
    704                         shader_blur_h->SetTexture(shader_blur_h_texture,fbo_ping->GetTexture(),0);
    705                         shader_blur_h->SetUniform(shader_blur_h_screen_w,1.0f/glow_fbo_size);
    706                         shader_blur_h->SetUniform(shader_blur_h_screen_h,1.0f/glow_fbo_size);
    707                         shader_blur_h->SetUniform(shader_blur_h_time,fx_angle);
    708                         shader_blur_h->SetUniform(shader_blur_h_value,2.5f/screen_w);
    709                         fs_quad();
    710                         shader_blur_h->Unbind();
    711                         fbo_blur_h->Unbind();
    712                         // shader blur vertical
    713                         fbo_blur_v->Bind();
    714                         shader_blur_v->Bind();
    715                         shader_blur_v->SetTexture(shader_blur_v_texture,fbo_blur_h->GetTexture(),0);
    716                         shader_blur_v->SetUniform(shader_blur_v_screen_w,1.0f/glow_fbo_size);
    717                         shader_blur_v->SetUniform(shader_blur_v_screen_h,1.0f/glow_fbo_size);
    718                         shader_blur_v->SetUniform(shader_blur_v_time,fx_angle);
    719                         shader_blur_v->SetUniform(shader_blur_h_value,2.5f/screen_h);
    720                         fs_quad();
    721                         shader_blur_v->Unbind();
    722                         fbo_blur_v->Unbind();
    723                         // shader blur horizontal
    724                         fbo_blur_h->Bind();
    725                         shader_blur_h->Bind();
    726                         shader_blur_h->SetTexture(shader_blur_h_texture,fbo_blur_v->GetTexture(),0);
    727                         shader_blur_h->SetUniform(shader_blur_h_screen_w,1.0f/glow_fbo_size);
    728                         shader_blur_h->SetUniform(shader_blur_h_screen_h,1.0f/glow_fbo_size);
    729                         shader_blur_h->SetUniform(shader_blur_h_time,fx_angle);
    730                         shader_blur_h->SetUniform(shader_blur_h_value,1.0f/screen_w);
    731                         fs_quad();
    732                         shader_blur_h->Unbind();
    733                         fbo_blur_h->Unbind();
    734                         // shader blur vertical
    735                         fbo_blur_v->Bind();
    736                         shader_blur_v->Bind();
    737                         shader_blur_v->SetTexture(shader_blur_v_texture,fbo_blur_h->GetTexture(),0);
    738                         shader_blur_v->SetUniform(shader_blur_v_screen_w,1.0f/glow_fbo_size);
    739                         shader_blur_v->SetUniform(shader_blur_v_screen_h,1.0f/glow_fbo_size);
    740                         shader_blur_v->SetUniform(shader_blur_v_time,fx_angle);
    741                         shader_blur_v->SetUniform(shader_blur_h_value,1.0f/screen_h);
    742                         fs_quad();
    743                         shader_blur_v->Unbind();
    744                         fbo_blur_v->Unbind();
    745                         // shader glow
    746                         fbo_pong->Bind();
    747                         shader_glow->Bind();
    748                         shader_glow->SetTexture(shader_glow_texture,fbo_blur_v->GetTexture(),0);
    749                         shader_glow->SetTexture(shader_glow_texture_prv,fbo_front->GetTexture(),1);
    750                         shader_glow->SetUniform(shader_glow_screen_w,1.0f);
    751                         shader_glow->SetUniform(shader_glow_screen_h,1.0f);
    752                         shader_glow->SetUniform(shader_glow_time,fx_angle);
    753                         shader_glow->SetUniform(shader_glow_step,glow_smoothstep);
    754                         shader_glow->SetUniform(shader_glow_value1,glow_mix_ratio1);
    755                         shader_glow->SetUniform(shader_glow_value2,glow_mix_ratio2);
    756                         fs_quad();
    757                         shader_glow->Unbind();
    758                         }
    759                 if(!shader_effect_flag)
    760                         {
    761                         // shader simple
    762                         fbo_pong->Bind();
    763                         draw_shader_simple(fbo_front,0);
    764                         }
    765                 fbo_pong->Unbind();
    766                 if(shader_postfx_flag)
    767                         {
    768                         // shader postfx
    769                         shader_postfx->Bind();
    770                         shader_postfx->SetTexture(shader_postfx_texture,fbo_pong->GetTexture(),0);
    771                         shader_postfx->SetUniform(shader_postfx_screen_w,screen_w);
    772                         shader_postfx->SetUniform(shader_postfx_screen_h,screen_h);
    773                         shader_postfx->SetUniform(shader_postfx_time,fx_angle);
    774                         shader_postfx->SetUniform(shader_postfx_flash,flash_value);
    775                         shader_postfx->SetUniform(shader_postfx_value,4.0f);
    776                         shader_postfx->SetUniform(shader_postfx_deform,postfx_deform);
    777                         shader_postfx->SetUniform(shader_postfx_scanline,postfx_scanline);
    778                         shader_postfx->SetUniform(shader_postfx_sync,(float)fabs(beat_value*cosf((main_angle-beat_angle)*8.0f)));
    779                         fs_quad();
    780                         shader_postfx->Unbind();
    781                         }
    782                 else
    783                         {
    784                         // shader simple
    785                         draw_shader_simple(fbo_pong,0);
    786                         }
    787                 }
    788         #endif
    789         /*-/PATACODE---------------------------------------------------------------*/
    790         return true;
    791         }
     509    glEnable(GL_BLEND);
     510    // draw dos
     511    if(dos_flag)
     512    {
     513        glDisable(GL_TEXTURE_2D);
     514        glDisable(GL_BLEND);
     515        glColor3f(1.0f, 1.0f, 1.0f);
     516        rectangle(dos_m, dos_m, screen_w-(int)(26.5f*ratio_2d)-dos_m*2, 10*ratio_2d);
     517        rectangle(screen_w-(int)(25.5f*ratio_2d)-dos_m, dos_m, 11*ratio_2d, 10*ratio_2d);
     518        rectangle(screen_w-(int)(13.5f*ratio_2d)-dos_m, dos_m, 11*ratio_2d, 10*ratio_2d);
     519        rectangle(screen_w-(int)(1.5f*ratio_2d)-dos_m, dos_m, (int)(1.5f*ratio_2d), 10*ratio_2d);
     520        rectangle(dos_m, dos_m+10*ratio_2d, 1*ratio_2d, screen_h-10*ratio_2d-dos_m*2);
     521        rectangle(screen_w-1*ratio_2d-dos_m, dos_m+10*ratio_2d, 1*ratio_2d, screen_h-10*ratio_2d-dos_m*2);
     522        rectangle(dos_m+1*ratio_2d, screen_h-1*ratio_2d-dos_m, screen_w-2*ratio_2d-dos_m*2, 1*ratio_2d);
     523        glColor3f(dos_r, dos_g, dos_b);
     524        rectangle(dos_m+1*ratio_2d, dos_m+1*ratio_2d, 28*ratio_2d, 8*ratio_2d);
     525        rectangle(dos_m+(int)(30.5f*ratio_2d), dos_m+2*ratio_2d, screen_w-(int)(58.5f*ratio_2d)-dos_m*2, 2*ratio_2d);
     526        rectangle(dos_m+(int)(30.5f*ratio_2d), dos_m+6*ratio_2d, screen_w-(int)(58.5f*ratio_2d)-dos_m*2, 2*ratio_2d);
     527        rectangle(screen_w-(int)(24.5f*ratio_2d)-dos_m, dos_m+1*ratio_2d, 7*ratio_2d, 6*ratio_2d);
     528        glColor3f(1.0f, 1.0f, 1.0f);
     529        rectangle(screen_w-(int)(23.5f*ratio_2d)-dos_m, dos_m+2*ratio_2d, 5*ratio_2d, 4*ratio_2d);
     530        glColor3f(0, 0, 0);
     531        rectangle(screen_w-(int)(22.5f*ratio_2d)-dos_m, dos_m+3*ratio_2d, 7*ratio_2d, 6*ratio_2d);
     532        rectangle(screen_w-(int)(12.5f*ratio_2d)-dos_m, dos_m+1*ratio_2d, 7*ratio_2d, 6*ratio_2d);
     533        glColor3f(dos_r, dos_g, dos_b);
     534        rectangle(screen_w-(int)(10.5f*ratio_2d)-dos_m, dos_m+2*ratio_2d, 7*ratio_2d, 7*ratio_2d);
     535        glColor3f(1.0f, 1.0f, 1.0f);
     536        rectangle(screen_w-(int)(9.5f*ratio_2d)-dos_m, dos_m+3*ratio_2d, 5*ratio_2d, 5*ratio_2d);
     537        rectangle(screen_w-8*ratio_2d-dos_m, screen_h-9*ratio_2d-dos_m, 7*ratio_2d, 8*ratio_2d);
     538        glColor3f(dos_r, dos_g, dos_b);
     539        rectangle(screen_w-7*ratio_2d-dos_m, screen_h-8*ratio_2d-dos_m, 6*ratio_2d, 7*ratio_2d);
     540        glColor3f(1.0f, 1.0f, 1.0f);
     541        rectangle(screen_w-4*ratio_2d-dos_m, screen_h-8*ratio_2d-dos_m, 4*ratio_2d, 2*ratio_2d);
     542        rectangle(screen_w-7*ratio_2d-dos_m, screen_h-5*ratio_2d-dos_m, 2*ratio_2d, 5*ratio_2d);
     543        rectangle(screen_w-6*ratio_2d-dos_m, screen_h-7*ratio_2d-dos_m, 1*ratio_2d, 1*ratio_2d);
     544        rectangle(screen_w-4*ratio_2d-dos_m, screen_h-5*ratio_2d-dos_m, 2*ratio_2d, 3*ratio_2d);
     545        glEnable(GL_BLEND);
     546        if(polygon) glEnable(GL_TEXTURE_2D);
     547        glBlendFunc(GL_ONE, GL_ONE);
     548        glVertexPointer(2, GL_INT, 0, shell_vtx);
     549        glTexCoordPointer(2, GL_FLOAT, 0, shell_tex);
     550        glDrawArrays(GL_QUADS, 0, 4);
     551        // draw dos text
     552        glVertexPointer(2, GL_INT, 0, dos_vtx);
     553        j=0;
     554        liner_line=-1;
     555        for(i=1;i<liner_length+1;i++)
     556        {
     557            j++;
     558            car=(unsigned char)txt[i-1];
     559            if(i==liner_length) car=car_cursor;
     560            if(car>32)
     561            {
     562                glLoadIdentity();
     563                glTranslated(x+j*(dos_w+2*ratio_2d), y, 0);
     564                float l_w=(car%16)*0.03125f;
     565                float l_h=(car-car%16)*0.001953125f;
     566                float dos_tex[]={l_w+0.03125f, 0.5f-l_h-0.03125f, l_w+0.03125f, 0.5f-l_h, l_w, 0.5f-l_h, l_w, 0.5f-l_h-0.03125f};
     567                glTexCoordPointer(2, GL_FLOAT, 0, dos_tex);
     568                if(car==car_cursor) glColor3f(CR*(dos_r+64), CR*(dos_g+48), CR*(dos_b+48));
     569                glDrawArrays(GL_QUADS, 0, 4);
     570                if(car==car_cursor) glColor3f(1.0f, 1.0f, 1.0f);
     571            }
     572            if(car==13)
     573            {
     574                j=0;
     575                liner_line++;
     576                x=dos_m;
     577                y=dos_m+(float)(15*ratio_2d+liner_line*(dos_h+4*ratio_2d));
     578                if(y+dos_h>screen_h-dos_m) break;
     579            }
     580        }
     581    }
     582    // draw debug
     583    //#if DEBUG
     584    if(debug_flag)
     585    {
     586        char debug[512];
     587        sprintf(debug, "width=%d\rheight=%d\rratio=%dx\rbeat=%-02.1f\rsync=%-02.1f\rkey code=%03d\r", screen_w, screen_h, ratio_2d, beat_value, sync_value, key_code);
     588        float l_v=0.0390625f;
     589        float l_j=0.001953125f;
     590        glVertexPointer(2, GL_INT, 0, debug_vtx);
     591        glLoadIdentity();
     592        glBlendFunc(GL_ONE, GL_ONE);
     593        glColor3f(0.625f, 0.25f, 0.0f);
     594        glTranslated(debug_x, debug_y, 0);
     595        j=0;
     596        for(i=0;i<(int)strlen(debug);i++)
     597        {
     598            j++;
     599            car=(unsigned char)debug[i];
     600            if(car==13)
     601            {
     602                glTranslated(-j*(debug_w-ratio_2d)*2, (debug_h-ratio_2d)*2, 0);
     603                j=0;
     604            }
     605            glTranslated((debug_w-ratio_2d)*2, 0, 0);
     606            if(car>32)
     607            {
     608                float l_w=(car%16)*0.03515625f;
     609                float l_h=(car-car%16)*0.00244140625f;
     610                float debug_tex[]={l_w+l_v-l_j, 1.0f-l_h-l_v, l_w+l_v-l_j, 1.0f-l_h, l_w-l_j, 1.0f-l_h, l_w-l_j, 1.0f-l_h-l_v};
     611                glTexCoordPointer(2, GL_FLOAT, 0, debug_tex);
     612                glDrawArrays(GL_QUADS, 0, 4);
     613            }
     614        }
     615    }
     616    //#endif
     617    // draw corner
     618    glDisable(GL_TEXTURE_2D);
     619    glDisable(GL_BLEND);
     620    glVertexPointer(2, GL_INT, 0, corner_vtx);
     621    glLoadIdentity();
     622    glColor3f(0, 0, 0);
     623    glDrawArrays(GL_TRIANGLES, 0, corner_n*3);
     624    glTranslated(screen_w, 0, 0);
     625    glRotated(90.0f, 0, 0, 1.0f);
     626    glDrawArrays(GL_TRIANGLES, 0, corner_n*3);
     627    glTranslated(screen_h, 0, 0);
     628    glRotated(90.0f, 0, 0, 1.0f);
     629    glDrawArrays(GL_TRIANGLES, 0, corner_n*3);
     630    glTranslated(screen_w, 0, 0);
     631    glRotated(90.0f, 0, 0, 1.0f);
     632    glDrawArrays(GL_TRIANGLES, 0, corner_n*3);
     633    glEnable(GL_BLEND);
     634    /* .-------------------. */
     635    /* | DRAW SOME 3D HERE | */
     636    /* °-------------------° */
     637    //init_viewport(0);
     638    /*-PATACODE----------------------------------------------------------------*/
     639    #if SHADER
     640    if(shader_flag)
     641    {
     642        init_shader();
     643        fbo_back->Unbind();
     644        if(shader_effect_flag&&shader_blur_flag)
     645        {
     646            // shader blur horizontal
     647            fbo_ping->Bind();
     648            shader_blur_h->Bind();
     649            shader_blur_h->SetTexture(shader_blur_h_texture, fbo_back->GetTexture(), 0);
     650            shader_blur_h->SetUniform(shader_blur_h_screen_w, 1.0f);
     651            shader_blur_h->SetUniform(shader_blur_h_screen_h, 1.0f);
     652            shader_blur_h->SetUniform(shader_blur_h_time, fx_angle);
     653            shader_blur_h->SetUniform(shader_blur_h_value, 0.5f/screen_w);
     654            fs_quad();
     655            shader_blur_h->Unbind();
     656            fbo_ping->Unbind();
     657            // shader blur vertical
     658            fbo_front->Bind();
     659            shader_blur_v->Bind();
     660            shader_blur_v->SetTexture(shader_blur_v_texture, fbo_ping->GetTexture(), 0);
     661            shader_blur_v->SetUniform(shader_blur_v_screen_w, 1.0f);
     662            shader_blur_v->SetUniform(shader_blur_v_screen_h, 1.0f);
     663            shader_blur_v->SetUniform(shader_blur_v_time, fx_angle);
     664            shader_blur_v->SetUniform(shader_blur_v_value, 0.5f/screen_h);
     665            fs_quad();
     666            shader_blur_v->Unbind();
     667        }
     668        else
     669        {
     670            // shader simple
     671            fbo_front->Bind();
     672            draw_shader_simple(fbo_back, 0);
     673        }
     674        fbo_front->Unbind();
     675        // shader glow
     676        if(shader_effect_flag&&shader_glow_flag)
     677        {
     678            // shader blur horizontal
     679            fbo_blur_h->Bind();
     680            shader_blur_h->Bind();
     681            shader_blur_h->SetTexture(shader_blur_h_texture, fbo_ping->GetTexture(), 0);
     682            shader_blur_h->SetUniform(shader_blur_h_screen_w, 1.0f/glow_fbo_size);
     683            shader_blur_h->SetUniform(shader_blur_h_screen_h, 1.0f/glow_fbo_size);
     684            shader_blur_h->SetUniform(shader_blur_h_time, fx_angle);
     685            shader_blur_h->SetUniform(shader_blur_h_value, 2.5f/screen_w);
     686            fs_quad();
     687            shader_blur_h->Unbind();
     688            fbo_blur_h->Unbind();
     689            // shader blur vertical
     690            fbo_blur_v->Bind();
     691            shader_blur_v->Bind();
     692            shader_blur_v->SetTexture(shader_blur_v_texture, fbo_blur_h->GetTexture(), 0);
     693            shader_blur_v->SetUniform(shader_blur_v_screen_w, 1.0f/glow_fbo_size);
     694            shader_blur_v->SetUniform(shader_blur_v_screen_h, 1.0f/glow_fbo_size);
     695            shader_blur_v->SetUniform(shader_blur_v_time, fx_angle);
     696            shader_blur_v->SetUniform(shader_blur_h_value, 2.5f/screen_h);
     697            fs_quad();
     698            shader_blur_v->Unbind();
     699            fbo_blur_v->Unbind();
     700            // shader blur horizontal
     701            fbo_blur_h->Bind();
     702            shader_blur_h->Bind();
     703            shader_blur_h->SetTexture(shader_blur_h_texture, fbo_blur_v->GetTexture(), 0);
     704            shader_blur_h->SetUniform(shader_blur_h_screen_w, 1.0f/glow_fbo_size);
     705            shader_blur_h->SetUniform(shader_blur_h_screen_h, 1.0f/glow_fbo_size);
     706            shader_blur_h->SetUniform(shader_blur_h_time, fx_angle);
     707            shader_blur_h->SetUniform(shader_blur_h_value, 1.0f/screen_w);
     708            fs_quad();
     709            shader_blur_h->Unbind();
     710            fbo_blur_h->Unbind();
     711            // shader blur vertical
     712            fbo_blur_v->Bind();
     713            shader_blur_v->Bind();
     714            shader_blur_v->SetTexture(shader_blur_v_texture, fbo_blur_h->GetTexture(), 0);
     715            shader_blur_v->SetUniform(shader_blur_v_screen_w, 1.0f/glow_fbo_size);
     716            shader_blur_v->SetUniform(shader_blur_v_screen_h, 1.0f/glow_fbo_size);
     717            shader_blur_v->SetUniform(shader_blur_v_time, fx_angle);
     718            shader_blur_v->SetUniform(shader_blur_h_value, 1.0f/screen_h);
     719            fs_quad();
     720            shader_blur_v->Unbind();
     721            fbo_blur_v->Unbind();
     722            // shader glow
     723            fbo_pong->Bind();
     724            shader_glow->Bind();
     725            shader_glow->SetTexture(shader_glow_texture, fbo_blur_v->GetTexture(), 0);
     726            shader_glow->SetTexture(shader_glow_texture_prv, fbo_front->GetTexture(), 1);
     727            shader_glow->SetUniform(shader_glow_screen_w, 1.0f);
     728            shader_glow->SetUniform(shader_glow_screen_h, 1.0f);
     729            shader_glow->SetUniform(shader_glow_time, fx_angle);
     730            shader_glow->SetUniform(shader_glow_step, glow_smoothstep);
     731            shader_glow->SetUniform(shader_glow_value1, glow_mix_ratio1);
     732            shader_glow->SetUniform(shader_glow_value2, glow_mix_ratio2);
     733            fs_quad();
     734            shader_glow->Unbind();
     735        }
     736        if(!shader_effect_flag)
     737        {
     738            // shader simple
     739            fbo_pong->Bind();
     740            draw_shader_simple(fbo_front, 0);
     741        }
     742        fbo_pong->Unbind();
     743        if(shader_postfx_flag)
     744        {
     745            // shader postfx
     746            shader_postfx->Bind();
     747            shader_postfx->SetTexture(shader_postfx_texture, fbo_pong->GetTexture(), 0);
     748            shader_postfx->SetUniform(shader_postfx_screen_w, screen_w);
     749            shader_postfx->SetUniform(shader_postfx_screen_h, screen_h);
     750            shader_postfx->SetUniform(shader_postfx_time, fx_angle);
     751            shader_postfx->SetUniform(shader_postfx_flash, flash_value);
     752            shader_postfx->SetUniform(shader_postfx_value, 4.0f);
     753            shader_postfx->SetUniform(shader_postfx_deform, postfx_deform);
     754            shader_postfx->SetUniform(shader_postfx_scanline, postfx_scanline);
     755            shader_postfx->SetUniform(shader_postfx_sync, (float)fabs(beat_value*cosf((main_angle-beat_angle)*8.0f)));
     756            fs_quad();
     757            shader_postfx->Unbind();
     758        }
     759        else
     760        {
     761            // shader simple
     762            draw_shader_simple(fbo_pong, 0);
     763        }
     764    }
     765    #endif
     766    /*-/PATACODE---------------------------------------------------------------*/
     767    return true;
     768}
    792769
    793770int CreateGLWindow(char* title)
    794         {
    795         GLuint pixelFormat;     // pixel format result
    796         uint32_t dwExStyle;             // window extended style
    797         uint32_t dwStyle;                       // window style
    798         screen_w=Video::GetSize().x;
    799         screen_h=Video::GetSize().y;
    800         timer_fps_min=32768;
    801         timer_fps_max=0;
    802         //ratio_2d=(int)(screen_w/400); if(ratio_2d<2) ratio_2d=2;
    803         corner_w=16*ratio_2d;
    804         corner();
    805         dos_w=2*ratio_2d;
    806         dos_h=4*ratio_2d;
    807         dos_m=12*ratio_2d;
    808         dos_vtx[0]=dos_w;
    809         dos_vtx[1]=dos_h;
    810         dos_vtx[2]=dos_w;
    811         dos_vtx[3]=-dos_h;
    812         dos_vtx[4]=-dos_w;
    813         dos_vtx[5]=-dos_h;
    814         dos_vtx[6]=-dos_w;
    815         dos_vtx[7]=dos_h;
    816         shell_vtx[0]=dos_m+29*ratio_2d;
    817         shell_vtx[1]=dos_m+9*ratio_2d;
    818         shell_vtx[2]=dos_m+29*ratio_2d;
    819         shell_vtx[3]=dos_m+1*ratio_2d;
    820         shell_vtx[4]=dos_m+1*ratio_2d;
    821         shell_vtx[5]=dos_m+1*ratio_2d;
    822         shell_vtx[6]=dos_m+1*ratio_2d;
    823         shell_vtx[7]=dos_m+9*ratio_2d;
    824         debug_w=5*ratio_2d;
    825         debug_h=5*ratio_2d;
    826         debug_x=10*ratio_2d;
    827         debug_y=28*ratio_2d;
    828         debug_vtx[0]=debug_w;
    829         debug_vtx[1]=debug_h;
    830         debug_vtx[2]=debug_w;
    831         debug_vtx[3]=-debug_h;
    832         debug_vtx[4]=-debug_w;
    833         debug_vtx[5]=-debug_h;
    834         debug_vtx[6]=-debug_w;
    835         debug_vtx[7]=debug_h;
     771{
     772    GLuint pixelFormat;    // pixel format result
     773    uint32_t dwExStyle;        // window extended style
     774    uint32_t dwStyle;            // window style
     775    screen_w=Video::GetSize().x;
     776    screen_h=Video::GetSize().y;
     777    //ratio_2d=(int)(screen_w/400); if(ratio_2d<2) ratio_2d=2;
     778    corner_w=16*ratio_2d;
     779    corner();
     780    dos_w=2*ratio_2d;
     781    dos_h=4*ratio_2d;
     782    dos_m=12*ratio_2d;
     783    dos_vtx[0]=dos_w;
     784    dos_vtx[1]=dos_h;
     785    dos_vtx[2]=dos_w;
     786    dos_vtx[3]=-dos_h;
     787    dos_vtx[4]=-dos_w;
     788    dos_vtx[5]=-dos_h;
     789    dos_vtx[6]=-dos_w;
     790    dos_vtx[7]=dos_h;
     791    shell_vtx[0]=dos_m+29*ratio_2d;
     792    shell_vtx[1]=dos_m+9*ratio_2d;
     793    shell_vtx[2]=dos_m+29*ratio_2d;
     794    shell_vtx[3]=dos_m+1*ratio_2d;
     795    shell_vtx[4]=dos_m+1*ratio_2d;
     796    shell_vtx[5]=dos_m+1*ratio_2d;
     797    shell_vtx[6]=dos_m+1*ratio_2d;
     798    shell_vtx[7]=dos_m+9*ratio_2d;
     799    debug_w=5*ratio_2d;
     800    debug_h=5*ratio_2d;
     801    debug_x=10*ratio_2d;
     802    debug_y=28*ratio_2d;
     803    debug_vtx[0]=debug_w;
     804    debug_vtx[1]=debug_h;
     805    debug_vtx[2]=debug_w;
     806    debug_vtx[3]=-debug_h;
     807    debug_vtx[4]=-debug_w;
     808    debug_vtx[5]=-debug_h;
     809    debug_vtx[6]=-debug_w;
     810    debug_vtx[7]=debug_h;
    836811    InitGL();
    837         return true;
    838         }
     812    return true;
     813}
    839814
    840815Render::Render()
     
    857832        todo = 0;
    858833    }
    859         DrawGLScene();
     834    DrawGLScene();
    860835}
    861836
Note: See TracChangeset for help on using the changeset viewer.