Changeset 2497


Ignore:
Timestamp:
Feb 25, 2013, 8:43:51 PM (7 years ago)
Author:
sam
Message:

gpu: add MeshPrimitive::Lines enum and modify the cube tutorial
to show how it can be used.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gpu/vertexbuffer.cpp

    r2426 r2497  
    155155            Abort();
    156156        break;
     157    case MeshPrimitive::Lines:
     158        if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_LINELIST,
     159                                              skip, count)))
     160            Abort();
     161        break;
    157162    }
    158163#else
     
    175180    case MeshPrimitive::Points:
    176181        glDrawArrays(GL_POINTS, skip, count);
     182        break;
     183    case MeshPrimitive::Lines:
     184        glDrawArrays(GL_LINES, skip, count);
    177185        break;
    178186    }
     
    218226            Abort();
    219227        break;
     228    case MeshPrimitive::Lines:
     229        if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_LINELIST,
     230                                           vbase, vskip, vcount, skip, count)))
     231            Abort();
     232        break;
    220233    }
    221234#else
     
    246259        (void)vbase; (void)vskip; (void)vcount; (void)skip;
    247260        glDrawElements(GL_POINTS, count, GL_UNSIGNED_SHORT, 0);
     261        break;
     262    case MeshPrimitive::Lines:
     263        /* FIXME: ignores most of the arguments! */
     264        (void)vbase; (void)vskip; (void)vcount; (void)skip;
     265        glDrawElements(GL_LINES, count, GL_UNSIGNED_SHORT, 0);
    248266        break;
    249267    }
  • trunk/src/lol/gpu/vertexbuffer.h

    r2426 r2497  
    7777        TriangleFans,
    7878        Points,
     79        Lines,
    7980    }
    8081    m_value;
  • trunk/tutorial/02_cube.cpp

    r2277 r2497  
    3939        m_mesh.Push(vec3(-1.0,  1.0, -1.0), vec3(0.0, 0.0, 1.0));
    4040
    41         m_indices << i16vec3(0, 1, 2);
    42         m_indices << i16vec3(2, 3, 0);
    43         m_indices << i16vec3(1, 5, 6);
    44         m_indices << i16vec3(6, 2, 1);
    45         m_indices << i16vec3(7, 6, 5);
    46         m_indices << i16vec3(5, 4, 7);
    47         m_indices << i16vec3(4, 0, 3);
    48         m_indices << i16vec3(3, 7, 4);
    49         m_indices << i16vec3(4, 5, 1);
    50         m_indices << i16vec3(1, 0, 4);
    51         m_indices << i16vec3(3, 2, 6);
    52         m_indices << i16vec3(6, 7, 3);
     41        m_faces_indices << 0 << 1 << 2 << 2 << 3 << 0;
     42        m_faces_indices << 1 << 5 << 6 << 6 << 2 << 1;
     43        m_faces_indices << 7 << 6 << 5 << 5 << 4 << 7;
     44        m_faces_indices << 4 << 0 << 3 << 3 << 7 << 4;
     45        m_faces_indices << 4 << 5 << 1 << 1 << 0 << 4;
     46        m_faces_indices << 3 << 2 << 6 << 6 << 7 << 3;
     47
     48        m_lines_indices << 0 << 1 << 1 << 2 << 2 << 3 << 3 << 0;
     49        m_lines_indices << 4 << 5 << 5 << 6 << 6 << 7 << 7 << 4;
     50        m_lines_indices << 0 << 4 << 1 << 5 << 2 << 6 << 3 << 7;
    5351
    5452        m_ready = false;
     
    9290            m_vbo->Unlock();
    9391
    94             m_ibo = new IndexBuffer(m_indices.Bytes());
    95             void *indices = m_ibo->Lock(0, 0);
    96             memcpy(indices, &m_indices[0], m_indices.Bytes());
    97             m_ibo->Unlock();
     92            m_lines_ibo = new IndexBuffer(m_lines_indices.Bytes());
     93            void *indices = m_lines_ibo->Lock(0, 0);
     94            memcpy(indices, &m_lines_indices[0], m_lines_indices.Bytes());
     95            m_lines_ibo->Unlock();
     96
     97            m_faces_ibo = new IndexBuffer(m_faces_indices.Bytes());
     98            indices = m_faces_ibo->Lock(0, 0);
     99            memcpy(indices, &m_faces_indices[0], m_faces_indices.Bytes());
     100            m_faces_ibo->Unlock();
    98101
    99102            /* FIXME: this object never cleans up */
     
    104107
    105108        m_shader->Bind();
    106         m_shader->SetUniform(m_mvp, m_matrix);
    107109        m_vdecl->SetStream(m_vbo, m_coord, m_color);
    108110        m_vdecl->Bind();
    109         m_ibo->Bind();
     111
     112        m_shader->SetUniform(m_mvp, m_matrix);
     113        m_lines_ibo->Bind();
     114        m_vdecl->DrawIndexedElements(MeshPrimitive::Lines, 0, 0,
     115                                     m_mesh.Count(), 0, m_lines_indices.Count());
     116        m_lines_ibo->Unbind();
     117
     118        m_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f));
     119        m_faces_ibo->Bind();
    110120        m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, 0, 0,
    111                                      m_mesh.Count(), 0, m_indices.Count() * 3);
    112         m_ibo->Unbind();
     121                                     m_mesh.Count(), 0, m_faces_indices.Count());
     122        m_faces_ibo->Unbind();
     123
    113124        m_vdecl->Unbind();
    114125    }
     
    118129    mat4 m_matrix;
    119130    Array<vec3,vec3> m_mesh;
    120     Array<i16vec3> m_indices;
     131    Array<uint16_t> m_lines_indices, m_faces_indices;
    121132
    122133    Shader *m_shader;
     
    125136    VertexDeclaration *m_vdecl;
    126137    VertexBuffer *m_vbo;
    127     IndexBuffer *m_ibo;
     138    IndexBuffer *m_lines_ibo, *m_faces_ibo;
    128139
    129140    bool m_ready;
Note: See TracChangeset for help on using the changeset viewer.