示例#1
0
文件: Canvas.cpp 项目: Cruel/SFGUI
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 ) );
}
示例#2
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
	}
}