From: Mikko Rasa Date: Tue, 12 Dec 2023 22:37:43 +0000 (+0200) Subject: Use emplace_back return value from C++17 for shorter code X-Git-Url: https://git.tdb.fi/?a=commitdiff_plain;h=cf3ee1f3e0363c6d646905c49ef2161e97b8552d;p=libs%2Fgl.git Use emplace_back return value from C++17 for shorter code --- diff --git a/Build b/Build index 9de35f31..469710fc 100644 --- a/Build +++ b/Build @@ -42,7 +42,7 @@ package "mspgl" build_info { - standard CXX "c++14"; + standard CXX "c++17"; }; generate "RES" diff --git a/source/backends/opengl/program_backend.cpp b/source/backends/opengl/program_backend.cpp index 732967d2..994373f3 100644 --- a/source/backends/opengl/program_backend.cpp +++ b/source/backends/opengl/program_backend.cpp @@ -339,8 +339,7 @@ void OpenGLProgram::query_uniforms() if(len>3 && !strcmp(name+len-3, "[0]")) name[len-3] = 0; - rd.uniforms.emplace_back(); - ReflectData::UniformInfo &info = rd.uniforms.back(); + ReflectData::UniformInfo &info = rd.uniforms.emplace_back(); info.tag = info.name = name; info.array_size = size; info.type = from_gl_type(type); @@ -360,8 +359,7 @@ void OpenGLProgram::query_uniforms() query_uniform_blocks(uniforms_by_index); } - rd.blocks.emplace_back(); - ReflectData::BlockInfo &default_block = rd.blocks.back(); + ReflectData::BlockInfo &default_block = rd.blocks.emplace_back(); for(ReflectData::UniformInfo &u: rd.uniforms) if(!u.block) @@ -391,8 +389,7 @@ void OpenGLProgram::query_uniform_blocks(const vector3 && !strcmp(name+len-3, "[0]")) name[len-3] = 0; - rd.attributes.emplace_back(); - ReflectData::AttributeInfo &info = rd.attributes.back(); + ReflectData::AttributeInfo &info = rd.attributes.emplace_back(); info.name = name; info.location = glGetAttribLocation(id, name); info.array_size = size; @@ -493,8 +489,7 @@ void OpenGLProgram::query_storage_blocks() rd.blocks.reserve(rd.blocks.size()+count); for(unsigned i=0; i=0 && static_cast(b.bind_point>>20)==j) { - bindings.emplace_back(); - VkDescriptorSetLayoutBinding &binding = bindings.back(); + VkDescriptorSetLayoutBinding &binding = bindings.emplace_back(); binding.binding = b.bind_point&0xFFFFF; if(b.is_storage()) binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; @@ -138,8 +137,7 @@ void VulkanProgram::finalize_uniforms() for(const ReflectData::UniformInfo &u: rd.uniforms) if(u.binding>=0 && static_cast(u.binding>>20)==j && is_image(u.type)) { - bindings.emplace_back(); - VkDescriptorSetLayoutBinding &binding = bindings.back(); + VkDescriptorSetLayoutBinding &binding = bindings.emplace_back(); binding.binding = u.binding&0xFFFFF; if(u.is_storage_image()) binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; diff --git a/source/backends/vulkan/structurebuilder.cpp b/source/backends/vulkan/structurebuilder.cpp index dd3d27ff..76b3cf2e 100644 --- a/source/backends/vulkan/structurebuilder.cpp +++ b/source/backends/vulkan/structurebuilder.cpp @@ -18,8 +18,7 @@ void *const &StructureBuilder::add(std::size_t size, std::size_t align) if(parts.size()>=parts.capacity()) throw invalid_operation("StructureBuilder::add"); - parts.emplace_back(); - Part &part = parts.back(); + Part &part = parts.emplace_back(); part.offset = storage.size()+align-1; part.offset -= part.offset%align; diff --git a/source/backends/vulkan/synchronizer.cpp b/source/backends/vulkan/synchronizer.cpp index 06bb4701..899e3e5a 100644 --- a/source/backends/vulkan/synchronizer.cpp +++ b/source/backends/vulkan/synchronizer.cpp @@ -141,8 +141,7 @@ void Synchronizer::barrier(const VulkanCommandRecorder &vkCmd) if(b.pending_write==b.was_written) continue; - buffer_barriers.emplace_back(VkBufferMemoryBarrier{ }); - VkBufferMemoryBarrier &barrier = buffer_barriers.back(); + VkBufferMemoryBarrier &barrier = buffer_barriers.emplace_back(VkBufferMemoryBarrier{ }); barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; barrier.srcAccessMask = (b.was_written ? VK_ACCESS_MEMORY_WRITE_BIT : 0); @@ -169,8 +168,7 @@ void Synchronizer::barrier(const VulkanCommandRecorder &vkCmd) if(i.level==-2 || i.pending_layout==i.current_layout) continue; - image_barriers.emplace_back(VkImageMemoryBarrier{ }); - VkImageMemoryBarrier &barrier = image_barriers.back(); + VkImageMemoryBarrier &barrier = image_barriers.emplace_back(VkImageMemoryBarrier{ }); barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; barrier.srcAccessMask = (is_write_layout(i.current_layout) ? VK_ACCESS_MEMORY_WRITE_BIT : 0); diff --git a/source/backends/vulkan/windowview_backend.cpp b/source/backends/vulkan/windowview_backend.cpp index c820f1ba..e91518a0 100644 --- a/source/backends/vulkan/windowview_backend.cpp +++ b/source/backends/vulkan/windowview_backend.cpp @@ -45,8 +45,8 @@ void VulkanWindowView::resize_framebuffer(unsigned w, unsigned h) for(unsigned i=0; iget_image(i); - framebuffers.emplace_back((COLOR_ATTACHMENT, image.get_format())); - framebuffers.back().attach(COLOR_ATTACHMENT, swap_chain->get_image(i)); + Framebuffer &fb = framebuffers.emplace_back((COLOR_ATTACHMENT, image.get_format())); + fb.attach(COLOR_ATTACHMENT, swap_chain->get_image(i)); } current_target = &framebuffers.front(); diff --git a/source/core/module.cpp b/source/core/module.cpp index 412cc27a..5a268c66 100644 --- a/source/core/module.cpp +++ b/source/core/module.cpp @@ -221,8 +221,7 @@ void SpirVModule::reflect() entry_points.reserve(reflection.entry_points.size()); for(auto &kvp: reflection.entry_points) { - entry_points.emplace_back(move(kvp.second)); - EntryPoint &entry = entry_points.back(); + EntryPoint &entry = entry_points.emplace_back(move(kvp.second)); for(const Variable *&v: entry.globals) { auto i = var_indices.find(v); diff --git a/source/core/program.cpp b/source/core/program.cpp index 7954ff5d..b2ea107e 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -69,8 +69,7 @@ void Program::collect_uniforms(const SpirVModule &mod) { if((v.storage==SpirVModule::UNIFORM || v.storage==SpirVModule::PUSH_CONSTANT || v.storage==SpirVModule::STORAGE_BUFFER) && v.struct_type) { - reflect_data.blocks.emplace_back(); - ReflectData::BlockInfo &info = reflect_data.blocks.back(); + ReflectData::BlockInfo &info = reflect_data.blocks.emplace_back(); info.tag = info.name = v.struct_type->name; if(v.storage!=SpirVModule::STORAGE_BUFFER) info.data_size = v.struct_type->size; @@ -88,20 +87,19 @@ void Program::collect_uniforms(const SpirVModule &mod) reflect_data.n_descriptor_sets = max(reflect_data.n_descriptor_sets, v.descriptor_set+1); } - block_uniform_names.emplace_back(); + vector &names = block_uniform_names.emplace_back(); if(!info.is_storage()) { string prefix; if(!v.name.empty()) prefix = v.struct_type->name+"."; - collect_block_uniforms(*v.struct_type, prefix, 0, block_uniform_names.back()); + collect_block_uniforms(*v.struct_type, prefix, 0, names); } } else if(v.storage==SpirVModule::UNIFORM_CONSTANT && (v.location>=0 || v.binding>=0)) { block_uniform_names[0].push_back(v.name); - reflect_data.uniforms.emplace_back(); - ReflectData::UniformInfo &info = reflect_data.uniforms.back(); + ReflectData::UniformInfo &info = reflect_data.uniforms.emplace_back(); info.tag = info.name = v.name; info.location = v.location; if(v.binding>=0) @@ -158,10 +156,8 @@ void Program::collect_block_uniforms(const SpirVModule::Structure &strct, const } else { - uniform_names.emplace_back(prefix+m.name); - const string &name = uniform_names.back(); - reflect_data.uniforms.emplace_back(); - ReflectData::UniformInfo &info = reflect_data.uniforms.back(); + const string &name = uniform_names.emplace_back(prefix+m.name); + ReflectData::UniformInfo &info = reflect_data.uniforms.emplace_back(); info.name = name; info.tag = name; info.offset = offset; @@ -181,8 +177,7 @@ void Program::collect_attributes(const SpirVModule &mod) for(const SpirVModule::Variable *v: e.globals) if(v->storage==SpirVModule::INPUT) { - reflect_data.attributes.emplace_back(); - ReflectData::AttributeInfo &info = reflect_data.attributes.back(); + ReflectData::AttributeInfo &info = reflect_data.attributes.emplace_back(); info.name = v->name; info.location = v->location; info.array_size = v->array_size; diff --git a/source/effects/shadowmap.cpp b/source/effects/shadowmap.cpp index 6dd797aa..0345ac1f 100644 --- a/source/effects/shadowmap.cpp +++ b/source/effects/shadowmap.cpp @@ -102,8 +102,7 @@ void ShadowMap::add_light(const Light &light, unsigned s, ShadowType type, Rende unsigned n_views = (type==TETRAHEDRON ? 4 : 1); - lights.emplace_back(); - ShadowedLight &sl = lights.back(); + ShadowedLight &sl = lights.emplace_back(); sl.light = &light; sl.index = index; sl.region = region; diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index d35b4351..be965175 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -447,8 +447,7 @@ void ExpressionInliner::visit(Assignment &assign) if(targets_overlap(i->first, assign.target)) i->second->blocked = true; - expressions.emplace_back(); - ExpressionInfo &info = expressions.back(); + ExpressionInfo &info = expressions.emplace_back(); info.target = assign.target; // Self-referencing assignments can't be inlined without additional work. if(!assign.self_referencing) @@ -494,8 +493,7 @@ void ExpressionInliner::visit(VariableDeclaration &var) analyze and non-trivial expressions could be expensive to inline. */ if((current_block->parent || (constant && r_trivial)) && var.interface.empty()) { - expressions.emplace_back(); - ExpressionInfo &info = expressions.back(); + ExpressionInfo &info = expressions.emplace_back(); info.target = &var; /* Assume variables declared in an iteration initialization statement will have their values change throughout the iteration. */ @@ -1407,8 +1405,7 @@ void UnusedVariableRemover::visit(FunctionCall &call) void UnusedVariableRemover::record_assignment(const Assignment::Target &target, Node &node) { - assignments.emplace_back(); - AssignmentInfo &assign_info = assignments.back(); + AssignmentInfo &assign_info = assignments.emplace_back(); assign_info.node = &node; assign_info.target = target; assign_info.in_loop = in_loop; diff --git a/source/render/instancearray.cpp b/source/render/instancearray.cpp index fee3b862..d87aebe0 100644 --- a/source/render/instancearray.cpp +++ b/source/render/instancearray.cpp @@ -56,8 +56,7 @@ InstanceArrayBase::~InstanceArrayBase() void InstanceArrayBase::add_block(size_t count) { - storage.emplace_back(); - Block &block = storage.back(); + Block &block = storage.emplace_back(); block.begin = new char[count*instance_size]; block.end = block.begin+count*instance_size; diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index e941d9fd..33ed0cca 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -37,8 +37,7 @@ void Renderer::begin() throw invalid_operation("Renderer::begin"); ++frame_number; - state_stack.emplace_back(); - current_state = &state_stack.back(); + current_state = &state_stack.emplace_back(); RendererBackend::begin(); @@ -224,8 +223,7 @@ void Renderer::set_resource(vector> &stack, unsigned &count, Ta break; } - stack.emplace_back(); - BoundResource &bound_res = stack.back(); + BoundResource &bound_res = stack.emplace_back(); bound_res.tag = tag; bound_res.resource = res; count = stack.size(); diff --git a/source/render/sequence.cpp b/source/render/sequence.cpp index c355020e..7ed16d3d 100644 --- a/source/render/sequence.cpp +++ b/source/render/sequence.cpp @@ -65,8 +65,7 @@ void Sequence::set_clear_stencil(int s) Sequence::Step &Sequence::add_step(Tag tag, Renderable &r) { - steps.emplace_back(tag, &r); - return steps.back(); + return steps.emplace_back(tag, &r); } void Sequence::add_postprocessor(PostProcessor &pp)