Changeset 1477


Ignore:
Timestamp:
Jun 14, 2012, 9:43:44 PM (8 years ago)
Author:
sam
Message:

neercs: improve the point sprite rendering routine.

Location:
trunk/neercs/video
Files:
2 edited

Legend:

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

    r1476 r1477  
    4040
    4141#define DEBUG 1            // debug flag //#if defined(_DEBUG)
    42 #define SHADER 0           // shader flag
     42#define SHADER 1           // shader flag
    4343#define FUCK 0             // test flag
    4444#define PI 3.1415926535f   // pi
     
    183183        for (int j = 0; j < m_height; j++)
    184184        for (int i = 0; i < m_width; i++)
    185             m_vertices << vec2(0.05 * i - 1.0, 0.5 - 0.09 * j);
     185            m_vertices << vec2(5.0 / 128.0 * i - 0.75, 0.5 - 0.0525 * j);
    186186    }
    187187
     
    191191        m_coord = m_shader->GetAttribLocation("in_Position",
    192192                                              VertexUsage::Position, 0);
    193         m_color = m_shader->GetAttribLocation("in_Color",
     193        m_color = m_shader->GetAttribLocation("in_Attr",
    194194                                              VertexUsage::Color, 0);
    195195        m_char = m_shader->GetAttribLocation("in_Char",
     
    212212    void Blit()
    213213    {
    214         void *colors = m_vbo2->Lock(0, 0);
    215 for (int j = 0; j < m_height; j++)
    216 for (int i = 0; i < m_width; i++)
    217 {
    218     uint32_t attr = caca_get_attr(m_caca, i, j);
    219 //printf("%i %i: %08x -> ", i, j, attr);
    220     uint16_t fg = caca_attr_to_rgb12_fg(attr);
    221     uint16_t bg = caca_attr_to_rgb12_bg(attr);
    222 //printf("%04x %04x -> ", fg, bg);
    223     caca_set_color_argb(m_caca, fg, bg);
    224     attr = caca_get_attr(m_caca, -1, -1);
    225 //printf("%08x\n", attr);
    226     caca_put_attr(m_caca, i, j, attr);
    227 }
     214        uint32_t *colors = (uint32_t *)m_vbo2->Lock(0, 0);
     215        for (int j = 0; j < m_height; j++)
     216        for (int i = 0; i < m_width; i++)
     217        {
     218            uint32_t attr = caca_get_attr(m_caca, i, j);
     219            uint16_t fg = caca_attr_to_rgb12_fg(attr);
     220            uint16_t bg = caca_attr_to_rgb12_bg(attr);
     221            caca_set_color_argb(m_caca, fg, bg);
     222            attr = caca_get_attr(m_caca, -1, -1);
     223            caca_put_attr(m_caca, i, j, attr);
     224            uint32_t a2 = caca_get_attr(m_caca, i, j);
     225        }
    228226        memcpy(colors, caca_get_canvas_attrs(m_caca),
    229227               m_width * m_height * sizeof(uint32_t));
    230228        m_vbo2->Unlock();
    231229
    232         void *chars = m_vbo3->Lock(0, 0);
     230        uint32_t *chars = (uint32_t *)m_vbo3->Lock(0, 0);
    233231        memcpy(chars, caca_get_canvas_chars(m_caca),
    234232               m_width * m_height * sizeof(uint32_t));
     
    250248        tex_map->Unbind();
    251249        m_shader->Unbind();
     250        glDisable(GL_POINT_SPRITE);
    252251    }
    253252
     
    534533    }
    535534
     535    Draw2D();
     536    Draw3D();
     537
     538#if FUCK
     539    text_render->Blit();
     540#endif
     541}
     542
     543void Render::Draw2D()
     544{
     545#if SHADER
     546    if(shader_flag)
     547    {
     548        fbo_back->Bind();
     549        fbo_back->Clear(vec4(screen_color, 0.0f), 1.0f);
     550    }
     551    else
     552    {
     553        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     554    }
     555#else
     556    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     557#endif
     558
    536559    glEnableClientState(GL_VERTEX_ARRAY);
    537560    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    538     Draw2D();
    539     Draw3D();
    540     glDisableClientState(GL_VERTEX_ARRAY);
    541     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    542 #if FUCK
    543     text_render->Blit();
    544 #endif
    545 }
    546 
    547 void Render::Draw2D()
    548 {
    549 #if SHADER
    550     if(shader_flag)
    551     {
    552         fbo_back->Bind();
    553         fbo_back->Clear(vec4(screen_color, 0.0f), 1.0f);
    554     }
    555     else
    556     {
    557         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    558     }
    559 #else
    560     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    561 #endif
    562561
    563562    glEnable(GL_BLEND);
     
    612611        glTexCoordPointer(2, GL_FLOAT, 0, shell_tex);
    613612        glDrawArrays(GL_QUADS, 0, 4);
     613#if !FUCK
    614614        // draw dos text
    615615        glVertexPointer(2, GL_INT, 0, dos_vtx);
     
    660660            //if(car==car_cursor) glColor3f(1.0f, 1.0f, 1.0f);
    661661        }
     662#endif
    662663    }
    663664    // draw corner
     
    679680    glEnable(GL_BLEND);
    680681    tex_map->Unbind();
     682
     683    glDisableClientState(GL_VERTEX_ARRAY);
     684    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    681685}
    682686
     
    689693    if (!shader_flag)
    690694        return;
     695
     696    glEnableClientState(GL_VERTEX_ARRAY);
     697    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    691698
    692699    init_shader();
     
    804811        draw_shader_simple(fbo_pong, 0);
    805812    }
     813
     814    glDisableClientState(GL_VERTEX_ARRAY);
     815    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    806816#endif
    807817}
  • trunk/neercs/video/text.lolfx

    r1476 r1477  
    11-- GLSL.Vert --
    22
    3 #version 150
     3#version 130
    44
    5 #if 0
    6 uniform mat4 MVP;
    7 void main()
    8 {
    9    gl_Position = MVP*vec4(vVertex,1);
    10 }
    11 #endif
    125attribute vec2 in_Position;
    136attribute uint in_Char, in_Attr;
     
    3326        float H = float((in_Attr >> 4u) & 0x7u) / 7.0;
    3427
    35     pass_Background = vec4(B, C, D, 1.0);
    36     //pass_Foreground = vec4(F, G, H, 1.0);
    37     pass_Foreground = vec4(1.0, 1.0, H, 1.0);
     28    pass_Background = vec4(B, C, D, 1.0 - A);
     29    pass_Foreground = vec4(F, G, H, 1.0 - E);
    3830
    3931    // This only works with glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
    4032    //gl_PointSize = 40;
     33
    4134    gl_Position = vec4(in_Position, 0.0, 1.0);
    4235}
     
    4437-- GLSL.Frag --
    4538
    46 #version 150
     39#version 130
    4740
    4841varying vec4 pass_Foreground;
     
    5447void main(void)
    5548{
    56     vec2 c = (gl_PointCoord + vec2(0.0,0.0)) / 32 + pass_UV;
     49    vec2 c = gl_PointCoord * (1.0 / 32.0) + pass_UV;
    5750    float t = texture2D(in_Texture, c).x;
    5851    gl_FragColor = mix(pass_Background, pass_Foreground, t);
Note: See TracChangeset for help on using the changeset viewer.