Changeset 44 for trunk/src


Ignore:
Timestamp:
05/28/13 16:48:29 (12 years ago)
Author:
epyon
Message:
  • context bugfixes, force apply state at creation and apply render state
  • window creates context
  • index buffer
  • vertex arrays (simulation of GL 3 functionality)
  • bugfixes
Location:
trunk/src/gl
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gl/gl_context.cc

    r37 r44  
    1313{
    1414        // apply_framebuffer
     15       
    1516        apply_scissor_test( cs.scissor_test );
    1617        apply_color_mask( cs.color_mask );
     
    3536                m_clear_stencil = cs.stencil;
    3637        }
    37 
    38         glClear( cs.buffers );
     38       
     39        glClear( clear_state_buffers_to_mask( cs.buffers ) );
    3940}
    4041
     
    347348}
    348349
     350
     351gl_context::gl_context()
     352{
     353        force_apply_render_state( m_render_state );
     354}
  • trunk/src/gl/gl_device.cc

    r42 r44  
    5656}
    5757
     58index_buffer* gl_device::create_index_buffer( buffer_hint hint, int size, void* source /*= nullptr */ )
     59{
     60        return new gl_index_buffer( hint, size, source );
     61}
     62
     63vertex_array* gl_device::create_vertex_array()
     64{
     65        return new gl_vertex_array();
     66}
     67
    5868gl_device::~gl_device()
    5969{
  • trunk/src/gl/gl_enum.cc

    r43 r44  
    186186        switch( type )
    187187        {
     188        case BYTE           : return GL_BYTE;
     189        case UBYTE          : return GL_UNSIGNED_BYTE;
     190        case SHORT          : return GL_SHORT;
     191        case USHORT         : return GL_UNSIGNED_SHORT;
     192        case INT            : return GL_INT;
     193        case UINT               : return GL_UNSIGNED_INT;
    188194        case FLOAT          : return GL_FLOAT;
    189195        case FLOAT_VECTOR_2 : return GL_FLOAT_VEC2;
     
    193199        case FLOAT_MATRIX_3 : return GL_FLOAT_MAT3;
    194200        case FLOAT_MATRIX_4 : return GL_FLOAT_MAT4;
    195         case INT            : return GL_INT;
    196201        case INT_VECTOR_2   : return GL_INT_VEC2;
    197202        case INT_VECTOR_3   : return GL_INT_VEC3;
     
    205210        switch( gl_enum )
    206211        {
    207         case GL_FLOAT      : return FLOAT;
    208         case GL_FLOAT_VEC2 : return FLOAT_VECTOR_2;
    209         case GL_FLOAT_VEC3 : return FLOAT_VECTOR_3;
    210         case GL_FLOAT_VEC4 : return FLOAT_VECTOR_4;
    211         case GL_FLOAT_MAT2 : return FLOAT_MATRIX_2;
    212         case GL_FLOAT_MAT3 : return FLOAT_MATRIX_3;
    213         case GL_FLOAT_MAT4 : return FLOAT_MATRIX_4;
    214         case GL_INT        : return INT;
    215         case GL_INT_VEC2   : return INT_VECTOR_2;
    216         case GL_INT_VEC3   : return INT_VECTOR_3;
    217         case GL_INT_VEC4   : return INT_VECTOR_4;
     212        case GL_BYTE           : return BYTE;
     213        case GL_UNSIGNED_BYTE  : return UBYTE;
     214        case GL_SHORT          : return SHORT;
     215        case GL_UNSIGNED_SHORT : return USHORT;
     216        case GL_INT            : return INT;
     217        case GL_UNSIGNED_INT   : return UINT;
     218        case GL_FLOAT          : return FLOAT;
     219        case GL_FLOAT_VEC2     : return FLOAT_VECTOR_2;
     220        case GL_FLOAT_VEC3     : return FLOAT_VECTOR_3;
     221        case GL_FLOAT_VEC4     : return FLOAT_VECTOR_4;
     222        case GL_FLOAT_MAT2     : return FLOAT_MATRIX_2;
     223        case GL_FLOAT_MAT3     : return FLOAT_MATRIX_3;
     224        case GL_FLOAT_MAT4     : return FLOAT_MATRIX_4;
     225        case GL_INT_VEC2       : return INT_VECTOR_2;
     226        case GL_INT_VEC3       : return INT_VECTOR_3;
     227        case GL_INT_VEC4       : return INT_VECTOR_4;
    218228        default : return type(0); // TODO: throw!
    219229        }
  • trunk/src/gl/gl_vertex_buffer.cc

    r42 r44  
    4040        return m_name.is_valid();
    4141}
     42
     43gl_index_buffer::gl_index_buffer( buffer_hint hint, int size, void* data )
     44        : index_buffer( hint, size ), m_name()
     45{
     46        if (data)
     47        {
     48                assign( data );
     49        }
     50}
     51
     52void gl_index_buffer::assign( void* data )
     53{
     54        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
     55        glBufferData( GL_ELEMENT_ARRAY_BUFFER, m_size, data, buffer_hint_to_enum( m_hint ) );
     56        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0);
     57}
     58
     59void gl_index_buffer::bind()
     60{
     61        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
     62}
     63
     64void gl_index_buffer::unbind()
     65{
     66        glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
     67}
     68
     69bool gl_index_buffer::is_valid() const
     70{
     71        return m_name.is_valid();
     72}
     73
     74gl_vertex_array::gl_vertex_array()
     75{
     76
     77}
     78
     79void gl_vertex_array::bind()
     80{
     81        for ( vertex_buffer_attribute_map::iterator i = m_map.begin();  i != m_map.end(); ++i )
     82        {
     83                int location                = i->first;
     84                vertex_buffer_attribute* va = i->second;
     85                vertex_buffer*           vb = va->get_buffer();
     86                glEnableVertexAttribArray( location );
     87                vb->bind();
     88                glVertexAttribPointer(
     89                        location,
     90                        va->get_components(),
     91                        nv::type_to_gl_enum( va->get_datatype() ),
     92                        GL_FALSE,
     93                        va->get_stride(),
     94                        (void*)va->get_offset()
     95                        );
     96                vb->unbind();
     97        }
     98
     99}
     100
     101void gl_vertex_array::unbind()
     102{
     103        for ( vertex_buffer_attribute_map::iterator i = m_map.begin();  i != m_map.end(); ++i )
     104        {
     105                glDisableVertexAttribArray( i->first );
     106        }
     107}
  • trunk/src/gl/gl_window.cc

    r38 r44  
    2929        NV_LOG( LOG_INFO, "OpenGL Version      : " << glGetString(GL_VERSION) );
    3030        NV_LOG( LOG_INFO, "OpenGL GLSL Version : " << glGetString(GL_SHADING_LANGUAGE_VERSION) );
     31
     32        m_context = new gl_context();
     33        m_context->set_viewport( nv::ivec4( 0, 0, m_width, m_height ) );
    3134}
    3235
     
    5154        m_title = title;
    5255}
     56
     57gl_window::~gl_window()
     58{
     59        delete m_context;
     60}
Note: See TracChangeset for help on using the changeset viewer.