Changeset 1467


Ignore:
Timestamp:
Jun 14, 2012, 2:52:05 AM (7 years ago)
Author:
sam
Message:

neercs: start working on direct rendering of libcaca canvases.

Location:
trunk/neercs
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/neercs/Makefile.am

    r1462 r1467  
    1010nodist_neercs_SOURCES = \
    1111    video/blurh.lolfx.cpp video/blurv.lolfx.cpp video/glow.lolfx.cpp \
    12     video/postfx.lolfx.cpp video/radial.lolfx.cpp video/simple.lolfx.cpp
     12    video/postfx.lolfx.cpp video/radial.lolfx.cpp video/simple.lolfx.cpp \
     13    video/text.lolfx.cpp
    1314neercs_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@
    1415neercs_LDADD =
  • trunk/neercs/neercs.cpp

    r1462 r1467  
    8080    caca_set_color_ansi(m_caca, CACA_YELLOW, CACA_RED);
    8181    caca_printf(m_caca, x4, 12, "Le Caca C'Est Surpuissant");
     82
     83    caca_printf(m_caca, 0, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
     84    caca_printf(m_caca, 0, 1, " !\"#$%&'()*+,-./0123456789");
    8285}
    8386
  • trunk/neercs/neercs.vcxproj

    r1465 r1467  
    4747    <LolFxCompile Include="video\radial.lolfx" />
    4848    <LolFxCompile Include="video\simple.lolfx" />
     49    <LolFxCompile Include="video\text.lolfx" />
    4950  </ItemGroup>
    5051  <PropertyGroup Label="Globals">
  • trunk/neercs/neercs.vcxproj.filters

    r1457 r1467  
    3737      <Filter>video</Filter>
    3838    </LolFxCompile>
     39    <LolFxCompile Include="video\text.lolfx">
     40      <Filter>video</Filter>
     41    </LolFxCompile>
    3942  </ItemGroup>
    4043</Project>
  • trunk/neercs/video/render.cpp

    r1463 r1467  
    3737extern char const *lolfx_radial;
    3838extern char const *lolfx_simple;
     39extern char const *lolfx_text;
    3940
    4041#define WIN32_LEAN_AND_MEAN
    4142#define DEBUG 1            // debug flag //#if defined(_DEBUG)
    4243#define SHADER 1           // shader flag
     44#define FUCK 0             // test flag
    4345#define PI 3.1415926535f   // pi
    4446#define PID PI/180.0f      // pi ratio
     
    4749bool done = false;
    4850
    49 //char *param=GetCommandLine();
     51/*
     52 * Various variables
     53 */
    5054
    5155int keys[256];             // keyboard array
     
    177181#endif
    178182
     183#if FUCK
     184/*
     185 * Text rendering interface
     186 */
     187struct TextRender
     188{
     189    TextRender(caca_canvas_t *caca)
     190      : m_caca(caca),
     191        m_width(caca_get_canvas_width(m_caca)),
     192        m_height(caca_get_canvas_height(m_caca))
     193    {
     194        for (int j = 0; j < m_height; j++)
     195        for (int i = 0; i < m_width; i++)
     196            m_vertices << vec2(0.05 * i - 1.0, 0.5 - 0.09 * j);
     197    }
     198
     199    void Init()
     200    {
     201        m_shader = Shader::Create(lolfx_text);
     202        m_coord = m_shader->GetAttribLocation("in_Position",
     203                                              VertexUsage::Position, 0);
     204        m_color = m_shader->GetAttribLocation("in_Color",
     205                                              VertexUsage::Color, 0);
     206        m_char = m_shader->GetAttribLocation("in_Char",
     207                                             VertexUsage::Color, 1);
     208        m_texture = m_shader->GetUniformLocation("in_Texture");
     209        m_vdecl
     210          = new VertexDeclaration(VertexStream<vec2>(VertexUsage::Position),
     211                                  VertexStream<int32_t>(VertexUsage::Color),
     212                                  VertexStream<int32_t>(VertexUsage::Color));
     213
     214        m_vbo1 = new VertexBuffer(m_vertices.Bytes());
     215        void *vertices = m_vbo1->Lock(0, 0);
     216        memcpy(vertices, &m_vertices[0], m_vertices.Bytes());
     217        m_vbo1->Unlock();
     218
     219        m_vbo2 = new VertexBuffer(m_width * m_height * sizeof(int32_t));
     220        m_vbo3 = new VertexBuffer(m_width * m_height * sizeof(int32_t));
     221    }
     222
     223    void Blit()
     224    {
     225        void *colors = m_vbo2->Lock(0, 0);
     226        memcpy(colors, caca_get_canvas_attrs(m_caca),
     227               m_width * m_height * sizeof(uint32_t));
     228for (int j = 0; j < m_height; j++)
     229for (int i = 0; i < m_width; i++)
     230{
     231    uint32_t attr = caca_get_attr(m_caca, i, j);
     232//printf("%i %i: %08x -> ", i, j, attr);
     233    uint16_t fg = caca_attr_to_rgb12_fg(attr);
     234    uint16_t bg = caca_attr_to_rgb12_bg(attr);
     235//printf("%04x %04x -> ", fg, bg);
     236    caca_set_color_argb(m_caca, fg, bg);
     237    attr = caca_get_attr(m_caca, -1, -1);
     238//printf("%08x\n", attr);
     239    caca_put_attr(m_caca, i, j, attr);
     240}
     241        m_vbo2->Unlock();
     242
     243        void *chars = m_vbo3->Lock(0, 0);
     244        memcpy(chars, caca_get_canvas_chars(m_caca),
     245               m_width * m_height * sizeof(uint32_t));
     246for (int j = 0; j < m_height; j++)
     247for (int i = 0; i < m_width; i++)
     248{
     249    uint32_t ch = caca_get_char(m_caca, i, j);
     250//    printf("%i %i: %08x -> ", i, j, ch);
     251}
     252        m_vbo3->Unlock();
     253
     254        glDisable(GL_POINT_SMOOTH);
     255        glPointSize(16.f);
     256        m_shader->Bind();
     257        tex_map->Bind();
     258        m_shader->SetUniform(m_texture, 0);
     259        m_vdecl->SetStream(m_vbo1, m_coord);
     260        m_vdecl->SetStream(m_vbo2, m_color);
     261        m_vdecl->SetStream(m_vbo3, m_char);
     262        m_vdecl->Bind();
     263        m_vdecl->DrawElements(MeshPrimitive::Points, 0, m_width * m_height);
     264        m_vdecl->Unbind();
     265        tex_map->Unbind();
     266        m_shader->Unbind();
     267    }
     268
     269private:
     270    caca_canvas_t *m_caca;
     271    int m_width, m_height;
     272
     273    Array<vec2> m_vertices;
     274    Shader *m_shader;
     275    ShaderAttrib m_coord, m_color, m_char;
     276    ShaderUniform m_texture;
     277    VertexDeclaration *m_vdecl;
     278    VertexBuffer *m_vbo1, *m_vbo2, *m_vbo3;
     279};
     280
     281TextRender *text_render;
     282#endif
     283
    179284void init_viewport(int type)
    180285{
     
    395500  : m_caca(caca)
    396501{
     502#if FUCK
     503    text_render = new TextRender(m_caca);
     504#endif
    397505}
    398506
     
    411519        CreateGLWindow("LOL");
    412520        todo = 0;
     521#if FUCK
     522        text_render->Init();
     523#endif
    413524    }
    414525
     
    459570    Draw2D();
    460571    Draw3D();
     572#if FUCK
     573    text_render->Blit();
     574#endif
    461575}
    462576
Note: See TracChangeset for help on using the changeset viewer.