void Canvas::SetupVBO() { if( m_vbo ) { return; } CheckGLError( GLEXT_glGenBuffers( 1, &m_vbo ) ); CheckGLError( GLEXT_glBindBuffer( GLEXT_GL_ARRAY_BUFFER, m_vbo ) ); // GL_TRIANGLE_STRIP GLbyte data[] = { 1, 1, 1, 1, -1, 1, 0, 1, 1, -1, 1, 0, -1, -1, 0, 0 }; CheckGLError( GLEXT_glBufferData( GLEXT_GL_ARRAY_BUFFER, sizeof( data ), data, GLEXT_GL_STATIC_DRAW ) ); CheckGLError( GLEXT_glBindBuffer( GLEXT_GL_ARRAY_BUFFER, 0 ) ); }
NonLegacyRenderer::NonLegacyRenderer() : m_previous_window_size( -1, -1 ), m_last_vertex_count( 0 ), m_last_index_count( 0 ), m_vbo_sync_type( INVALIDATE_ALL ), m_vbo_synced( false ), m_cull( false ), m_use_fbo( false ) { if( IsAvailable() ) { auto load_result = m_shader.loadFromMemory( "#version 130\n" "uniform vec2 viewport_parameters;\n" "in vec2 vertex;\n" "in vec4 color;\n" "in vec2 texture_coordinate;\n" "out vec4 vertex_color;\n" "out vec2 vertex_texture_coordinate;\n" "void main() {\n" "\tmat4 mvp_matrix = mat4(1.f);\n" "\tmvp_matrix[3][0] = -1.f;\n" "\tmvp_matrix[3][1] = 1.f;\n" "\tmvp_matrix[0][0] = viewport_parameters.x;\n" "\tmvp_matrix[1][1] = viewport_parameters.y;\n" "\tmvp_matrix[2][2] = -1.f;\n" "\tgl_Position = mvp_matrix * vec4(vertex.xy, 1.f, 1.f);\n" "\tvertex_color = color;\n" "\tvertex_texture_coordinate = texture_coordinate;\n" "}\n", "#version 130\n" "uniform sampler2D texture0;\n" "in vec4 vertex_color;\n" "in vec2 vertex_texture_coordinate;\n" "out vec4 fragment_color;\n" "void main() {\n" "\tfragment_color = vertex_color * texture(texture0, vertex_texture_coordinate);\n" "}\n" ); if( !load_result ) { shader_supported = false; #if defined( SFGUI_DEBUG ) std::cerr << "Non-legacy renderer unavailable.\n"; #endif return; } m_vertex_location = GetAttributeLocation( m_shader, "vertex" ); m_color_location = GetAttributeLocation( m_shader, "color" ); m_texture_coordinate_location = GetAttributeLocation( m_shader, "texture_coordinate" ); CheckGLError( GLEXT_glGenBuffers( 1, &m_vertex_vbo ) ); CheckGLError( GLEXT_glGenBuffers( 1, &m_color_vbo ) ); CheckGLError( GLEXT_glGenBuffers( 1, &m_texture_vbo ) ); CheckGLError( GLEXT_glGenBuffers( 1, &m_index_vbo ) ); } else { #if defined( SFGUI_DEBUG ) std::cerr << "Non-legacy renderer unavailable.\n"; #endif } }