//----------------------------------------------------------------------------------------------- void CommandConsole::RenderTextCursor() const { Renderer* renderer = Renderer::GetRenderer(); renderer->PushMatrix(); static const unsigned int LINE_START = 0; float xPosition = renderer->CalculateTextWidthFrom( "> " + m_prompt.currentInput, m_font, TEXT_LINE_HEIGHT, LINE_START, m_prompt.cursorLocation + 2 ) + 5.f; float yPosition = m_prompt.lowerLeftCorner.y + 5.f; //start slightly below the baseline renderer->TranslateWorld( FloatVector3( xPosition, yPosition, 0.f ) ); renderer->SetAlphaBlendingFunction( Renderer::ONE_MINUS_DESTINATION_COLOR, Renderer::NO_COLOR ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, m_prompt.cursorVertexBufferID ); static const int BEGINNING_OF_BUFFER = 0; static const int SIZE_OF_LINE_ARRAY_STRUCTURE = sizeof( VertexColorData2D ); static const int NUMBER_OF_VERTEX_COORDINATES = 2; renderer->SetPointerToVertexArray( NUMBER_OF_VERTEX_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_LINE_ARRAY_STRUCTURE, BEGINNING_OF_BUFFER ); static const int NUMBER_OF_COLOR_COORDINATES = 4; renderer->SetPointerToColorArray( NUMBER_OF_COLOR_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_LINE_ARRAY_STRUCTURE, ( float* )offsetof( VertexColorData2D, red ) ); static const unsigned int NUMBER_OF_CURSOR_VERTICES = 2; renderer->SetLineWidth( 1.f ); renderer->RenderVertexArray( Renderer::LINES, BEGINNING_OF_BUFFER, NUMBER_OF_CURSOR_VERTICES ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, 0 ); renderer->SetAlphaBlendingFunction( Renderer::SOURCE_ALPHA, Renderer::ONE_MINUS_SOURCE_ALPHA ); renderer->PopMatrix(); }
//----------------------------------------------------------------------------------------------- void CommandConsole::RenderBackgroundPanes() const { Renderer* renderer = Renderer::GetRenderer(); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, m_vertexBufferID ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, m_paneIndexBufferID ); static const int BEGINNING_OF_BUFFER = 0; static const int SIZE_OF_QUAD_ARRAY_STRUCTURE = sizeof( PaneColorData ); static const int NUMBER_OF_VERTEX_COORDINATES = 2; renderer->SetPointerToVertexArray( NUMBER_OF_VERTEX_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_QUAD_ARRAY_STRUCTURE, BEGINNING_OF_BUFFER ); static const int NUMBER_OF_COLOR_COORDINATES = 4; renderer->SetPointerToColorArray( NUMBER_OF_COLOR_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_QUAD_ARRAY_STRUCTURE, ( float* )offsetof( PaneColorData, paneColor ) ); renderer->RenderPartOfArray( Renderer::TRIANGLE_STRIP, 9, Renderer::UNSIGNED_SHORT_TYPE, BEGINNING_OF_BUFFER ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, 0 ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, 0 ); }
//----------------------------------------------------------------------------------------------- void CommandConsole::GenerateTextCursorVBO() { static const Color CURSOR_COLOR = Color( 1.f, 1.f, 1.f, 1.f ); static const unsigned int NUMBER_OF_CURSOR_VERTICES = 8; VertexColorData2D cursorVertices[ NUMBER_OF_CURSOR_VERTICES ] = { VertexColorData2D( FloatVector2( 0.f, 0.f ), CURSOR_COLOR ), VertexColorData2D( FloatVector2( 0.f, TEXT_LINE_HEIGHT ), CURSOR_COLOR ) }; Renderer* renderer = Renderer::GetRenderer(); renderer->GenerateBuffer( 1, &m_prompt.cursorVertexBufferID ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, m_prompt.cursorVertexBufferID ); renderer->SendDataToBuffer( Renderer::ARRAY_BUFFER, NUMBER_OF_CURSOR_VERTICES * sizeof( VertexColorData2D ), &cursorVertices[ 0 ] ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, 0 ); }
//----------------------------------------------------------------------------------------------- void CommandConsole::RenderBorders() const { Renderer* renderer = Renderer::GetRenderer(); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, m_vertexBufferID ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, m_borderIndexBufferID ); static const int BEGINNING_OF_BUFFER = 0; static const int SIZE_OF_QUAD_ARRAY_STRUCTURE = sizeof( PaneColorData ); static const int NUMBER_OF_VERTEX_COORDINATES = 2; renderer->SetPointerToVertexArray( NUMBER_OF_VERTEX_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_QUAD_ARRAY_STRUCTURE, BEGINNING_OF_BUFFER ); static const int NUMBER_OF_COLOR_COORDINATES = 4; renderer->SetPointerToColorArray( NUMBER_OF_COLOR_COORDINATES, Renderer::FLOAT_TYPE, SIZE_OF_QUAD_ARRAY_STRUCTURE, ( float* )offsetof( PaneColorData, borderColor ) ); renderer->SetLineWidth( BORDER_THICKNESS ); renderer->RenderPartOfArray( Renderer::LINE_LOOP, 9, Renderer::UNSIGNED_SHORT_TYPE, BEGINNING_OF_BUFFER ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, 0 ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, 0 ); }
//----------------------------------------------------------------------------------------------- void CommandConsole::GenerateConsolePaneVBO() { static const unsigned int NUMBER_OF_PANE_VERTICES = 8; PaneColorData consolePaneVertices[ NUMBER_OF_PANE_VERTICES ] = { PaneColorData( m_log.lowerLeftCorner, BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( FloatVector2( m_log.upperRightCorner.x, m_log.lowerLeftCorner.y ), BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( FloatVector2( m_log.lowerLeftCorner.x, m_log.upperRightCorner.y ), BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( m_log.upperRightCorner, BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( m_prompt.lowerLeftCorner, BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( FloatVector2( m_prompt.upperRightCorner.x, m_prompt.lowerLeftCorner.y ), BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( FloatVector2( m_prompt.lowerLeftCorner.x, m_prompt.upperRightCorner.y ), BACKGROUND_PANE_COLOR, BORDER_COLOR ), PaneColorData( m_prompt.upperRightCorner, BACKGROUND_PANE_COLOR, BORDER_COLOR ) }; static const unsigned int NUMBER_OF_PANE_INDICES = 9; unsigned short consolePaneIndices[ NUMBER_OF_PANE_INDICES ] = { 0, 1, 2, 3, 0xFFFF, 4, 5, 6, 7 }; static const unsigned int NUMBER_OF_BORDER_INDICES = 9; unsigned short consoleBorderIndices[ NUMBER_OF_BORDER_INDICES ] = { 0, 1, 3, 2, 0xFFFF, 4, 5, 7, 6 }; Renderer* renderer = Renderer::GetRenderer(); renderer->GenerateBuffer( 1, &m_vertexBufferID ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, m_vertexBufferID ); renderer->SendDataToBuffer( Renderer::ARRAY_BUFFER, NUMBER_OF_PANE_VERTICES * sizeof( PaneColorData ), &consolePaneVertices[ 0 ] ); renderer->GenerateBuffer( 1, &m_paneIndexBufferID ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, m_paneIndexBufferID); renderer->SendDataToBuffer( Renderer::INDEX_BUFFER, NUMBER_OF_PANE_INDICES * sizeof( unsigned short ), &consolePaneIndices[ 0 ] ); renderer->GenerateBuffer( 1, &m_borderIndexBufferID ); renderer->BindBufferObject( Renderer::INDEX_BUFFER, m_borderIndexBufferID); renderer->SendDataToBuffer( Renderer::INDEX_BUFFER, NUMBER_OF_BORDER_INDICES * sizeof( unsigned short ), &consoleBorderIndices[ 0 ] ); renderer->BindBufferObject( Renderer::ARRAY_BUFFER, 0 ); }