本文整理汇总了C++中Primitive::SetSynced方法的典型用法代码示例。如果您正苦于以下问题:C++ Primitive::SetSynced方法的具体用法?C++ Primitive::SetSynced怎么用?C++ Primitive::SetSynced使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Primitive
的用法示例。
在下文中一共展示了Primitive::SetSynced方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RefreshArray
void VertexArrayRenderer::RefreshArray() {
SortPrimitives();
m_vertex_data.clear();
m_color_data.clear();
m_texture_data.clear();
m_index_data.clear();
m_vertex_data.reserve( m_vertex_count );
m_color_data.reserve( m_vertex_count );
m_texture_data.reserve( m_vertex_count );
m_index_data.reserve( m_index_count );
m_batches.clear();
m_last_vertex_count = 0;
m_last_index_count = 0;
auto primitives_size = m_primitives.size();
// Default viewport
Batch current_batch;
current_batch.viewport = m_default_viewport;
current_batch.atlas_page = 0;
current_batch.start_index = 0;
current_batch.index_count = 0;
current_batch.min_index = 0;
current_batch.max_index = static_cast<GLuint>( m_vertex_count - 1 );
current_batch.custom_draw = false;
sf::FloatRect window_viewport( 0.f, 0.f, static_cast<float>( m_window_size.x ), static_cast<float>( m_window_size.y ) );
for( std::size_t primitive_index = 1; primitive_index != primitives_size + 1; primitive_index += 1 ) {
Primitive* primitive = m_primitives[primitive_index - 1].get();
primitive->SetSynced();
if( !primitive->IsVisible() ) {
continue;
}
sf::Vector2f position_transform( primitive->GetPosition() );
auto viewport = primitive->GetViewport();
std::size_t atlas_page = 0;
auto viewport_rect = window_viewport;
// Check if primitive needs to be rendered in a custom viewport.
if( viewport && ( ( *viewport ) != ( *m_default_viewport ) ) ) {
sf::Vector2f destination_origin( viewport->GetDestinationOrigin() );
sf::Vector2f size( viewport->GetSize() );
position_transform += ( destination_origin - viewport->GetSourceOrigin() );
if( m_cull ) {
viewport_rect.left = destination_origin.x;
viewport_rect.top = destination_origin.y;
viewport_rect.width = size.x;
viewport_rect.height = size.y;
}
}
const std::shared_ptr<Signal>& custom_draw_callback( primitive->GetCustomDrawCallback() );
if( custom_draw_callback ) {
// Start a new batch.
current_batch.max_index = m_last_vertex_count ? ( static_cast<GLuint>( m_last_vertex_count ) - 1 ) : 0;
m_batches.push_back( current_batch );
// Mark current_batch custom draw batch.
current_batch.viewport = viewport;
current_batch.start_index = 0;
current_batch.index_count = 0;
current_batch.min_index = 0;
current_batch.max_index = 0;
current_batch.custom_draw = true;
current_batch.custom_draw_callback = custom_draw_callback;
// Start a new batch.
m_batches.push_back( current_batch );
// Reset current_batch to defaults.
current_batch.viewport = m_default_viewport;
current_batch.start_index = m_last_index_count;
current_batch.index_count = 0;
current_batch.min_index = m_last_vertex_count ? ( static_cast<GLuint>( m_last_vertex_count ) - 1 ) : 0;
current_batch.custom_draw = false;
}
else {
// Process primitive's vertices and indices
const std::vector<Primitive::Vertex>& vertices( primitive->GetVertices() );
const std::vector<GLuint>& indices( primitive->GetIndices() );
sf::Vector2f position( 0.f, 0.f );
sf::FloatRect bounding_rect( 0.f, 0.f, 0.f, 0.f );
for( const auto& vertex : vertices ) {
//.........这里部分代码省略.........
示例2: RefreshVBO
void Renderer::RefreshVBO( sf::RenderWindow& window ) {
SortPrimitives();
m_vertex_data.clear();
m_color_data.clear();
m_texture_data.clear();
m_viewport_pairs.clear();
m_last_vertex_count = 0;
std::size_t primitives_size = m_primitives.size();
// Check for alpha values in all primitives.
// Disable depth test if any found.
for( std::size_t primitive_index = 0; primitive_index < primitives_size; ++primitive_index ) {
const std::vector<Primitive::Vertex>& vertices( m_primitives[primitive_index]->GetVertices() );
std::size_t vertices_size = vertices.size();
for( std::size_t vertex_index = 0; vertex_index < vertices_size; ++vertex_index ) {
const Primitive::Vertex& vertex( vertices[vertex_index] );
if( m_depth_clear_strategy && ( vertex.color.a < 255 ) ) {
#ifdef SFGUI_DEBUG
std::cerr << "Detected alpha value " << static_cast<int>( vertex.color.a ) << " disabling depth test.\n";
#endif
m_depth_clear_strategy = NO_DEPTH;
}
}
}
// Used to normalize texture coordinates.
sf::Vector2f normalizer( 1.f / static_cast<float>( m_texture_atlas.getWidth() ), 1.f / static_cast<float>( m_texture_atlas.getHeight() ) );
// Depth test vars
float depth = -4.f;
float depth_delta = 4.f / static_cast<float>( primitives_size );
int direction = m_depth_clear_strategy ? -1 : 1;
int start = static_cast<int>( m_depth_clear_strategy ? primitives_size : 1 );
std::size_t end = m_depth_clear_strategy ? 0 : primitives_size + 1;
RendererViewport::Ptr current_viewport = m_default_viewport;
m_viewport_pairs.push_back( ViewportPair( m_default_viewport, 0 ) );
sf::FloatRect window_viewport( 0.f, 0.f, static_cast<float>( window.getSize().x ), static_cast<float>( window.getSize().y ) );
for( std::size_t primitive_index = start; primitive_index != end; primitive_index += direction ) {
Primitive* primitive = m_primitives[primitive_index - 1].get();
primitive->SetSynced();
if( !primitive->IsVisible() ) {
continue;
}
sf::Vector2f position_transform( primitive->GetPosition() );
// Check if primitive needs to be rendered in a custom viewport.
RendererViewport::Ptr viewport = primitive->GetViewport();
if( viewport != current_viewport ) {
current_viewport = viewport;
ViewportPair scissor_pair( viewport, m_last_vertex_count );
m_viewport_pairs.push_back( scissor_pair );
}
bool cull = m_cull;
sf::FloatRect viewport_rect = window_viewport;
if( viewport && ( viewport != m_default_viewport ) ) {
sf::Vector2f destination_origin( viewport->GetDestinationOrigin() );
sf::Vector2f size( viewport->GetSize() );
position_transform += ( destination_origin - viewport->GetSourceOrigin() );
if( m_cull ) {
viewport_rect.left = destination_origin.x;
viewport_rect.top = destination_origin.y;
viewport_rect.width = size.x;
viewport_rect.height = size.y;
}
}
// Process primitive's vertices.
const std::vector<Primitive::Vertex>& vertices( primitive->GetVertices() );
std::size_t vertices_size = vertices.size();
for( std::size_t vertex_index = 0; vertex_index < vertices_size; ++vertex_index ) {
const Primitive::Vertex& vertex( vertices[vertex_index] );
sf::Vector3f position( vertex.position.x + position_transform.x, vertex.position.y + position_transform.y, depth );
m_vertex_data.push_back( position );
m_color_data.push_back( vertex.color );
//.........这里部分代码省略.........