From d2dc08f30986ef6f296e7405c9e8d133cb913885 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Fri, 6 Mar 2020 13:29:07 +0100 Subject: [PATCH] Get rid of lol::array in our public headers. --- lol-core | 2 +- src/Makefile.am | 1 - src/easymesh/easymeshrender.cpp | 93 ++++---- src/easymesh/easymeshrender.h | 4 +- src/engine/ticker.cpp | 12 +- src/gpu/shader.cpp | 45 ++-- src/image/codec/zed-image.cpp | 306 -------------------------- src/image/codec/zed-palette-image.cpp | 94 -------- src/image/resource.cpp | 2 - src/lol-core.vcxproj | 2 - src/lol-core.vcxproj.filters | 6 - src/lol/base/array.h | 9 - src/lol/gpu/shader.h | 11 +- src/lol/image/resource.h | 6 +- src/lol/sys/file.h | 9 +- src/lol/sys/init.h | 4 +- src/mesh/primitivemesh.cpp | 16 +- src/scene.cpp | 129 ++++++----- src/scene.h | 31 +-- src/sys/file.cpp | 37 ++-- src/sys/init.cpp | 22 +- src/tileset.cpp | 32 +-- src/tileset.h | 7 +- 23 files changed, 242 insertions(+), 638 deletions(-) delete mode 100644 src/image/codec/zed-image.cpp delete mode 100644 src/image/codec/zed-palette-image.cpp diff --git a/lol-core b/lol-core index e7984246..c1d74196 160000 --- a/lol-core +++ b/lol-core @@ -1 +1 @@ -Subproject commit e7984246c375a93755c74fe78e4c254a8931533d +Subproject commit c1d74196da4b2d9b50d1047dd521a29b81c78e7c diff --git a/src/Makefile.am b/src/Makefile.am index e12a9ba6..a5bfcbd0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -110,7 +110,6 @@ liblol_core_sources = \ image/crop.cpp image/resample.cpp image/noise.cpp image/combine.cpp \ image/codec/gdiplus-image.cpp image/codec/imlib2-image.cpp \ image/codec/sdl-image.cpp image/codec/ios-image.cpp \ - image/codec/zed-image.cpp image/codec/zed-palette-image.cpp \ image/codec/oric-image.cpp image/codec/dummy-image.cpp \ image/dither/random.cpp image/dither/ediff.cpp image/dither/dbs.cpp \ image/dither/ostromoukhov.cpp image/dither/ordered.cpp \ diff --git a/src/easymesh/easymeshrender.cpp b/src/easymesh/easymeshrender.cpp index 906c5248..6db47448 100644 --- a/src/easymesh/easymeshrender.cpp +++ b/src/easymesh/easymeshrender.cpp @@ -193,17 +193,24 @@ void DefaultShaderData::SetupShaderDatas(mat4 const &model) mat4 modelview = view * model; mat3 normalmat = transpose(inverse(mat3(modelview))); /* FIXME: this should be hidden in the shader */ - array const &lights = scene.GetLights(); - array light_data; + std::vector const &lights = scene.GetLights(); + std::vector light_data; //This is not very nice, but necessary for emscripten WebGL generation. float f = 0.f; /* FIXME: the 4th component of the position can be used for other things */ /* FIXME: GetUniform("blabla") is costly */ - for (int i = 0; i < lights.count(); ++i) - light_data << vec4(lights[i]->GetPosition(), (float)lights[i]->GetType()) << lights[i]->GetColor(); - while (light_data.count() < LOL_MAX_LIGHT_COUNT) - light_data << vec4::zero << vec4::zero; + for (auto *l : lights) + { + light_data.push_back(vec4(l->GetPosition(), (float)l->GetType())); + light_data.push_back(l->GetColor()); + } + + while (light_data.size() < LOL_MAX_LIGHT_COUNT) + { + light_data.push_back(vec4::zero); + light_data.push_back(vec4::zero); + } int i = 0; m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), light_data); @@ -262,18 +269,18 @@ void GpuEasyMeshData::AddGpuData(std::shared_ptr gpudata, std::sh if (!m_ibo) { - array indexlist; + std::vector indexlist; for (int i = 0; i < src_mesh->m_indices.count(); i += 3) { - indexlist << src_mesh->m_indices[i + 0]; - indexlist << src_mesh->m_indices[i + 1]; - indexlist << src_mesh->m_indices[i + 2]; + indexlist.push_back(src_mesh->m_indices[i + 0]); + indexlist.push_back(src_mesh->m_indices[i + 1]); + indexlist.push_back(src_mesh->m_indices[i + 2]); } - m_ibo = std::make_shared(indexlist.bytes()); - m_ibo->set_data(indexlist.data(), indexlist.bytes()); + m_ibo = std::make_shared(indexlist.size() * sizeof(indexlist[0])); + m_ibo->set_data(indexlist.data(), indexlist.size() * sizeof(indexlist[0])); - m_indexcount = indexlist.count(); + m_indexcount = indexlist.size(); } //init to a minimum of gpudata->m_render_mode size @@ -302,8 +309,8 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr #define COPY_VBO \ vbo_data = &vertexlist[0]; \ - vbo_bytes = vertexlist.bytes(); \ - m_vertexcount = vertexlist.count(); \ + vbo_bytes = vertexlist.size() * sizeof(vertexlist[0]); \ + m_vertexcount = vertexlist.size(); \ new_vbo = std::make_shared(vbo_bytes); \ new_vbo->set_data(vbo_data, vbo_bytes); @@ -326,12 +333,13 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr VertexUsage::Color, VertexUsage::TexCoord)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, - src_mesh->m_vert[i].m_normal, - (u8vec4)(src_mesh->m_vert[i].m_color * 255.f), - src_mesh->m_vert[i].m_texcoord); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + src_mesh->m_vert[i].m_normal, + (u8vec4)(src_mesh->m_vert[i].m_color * 255.f), + src_mesh->m_vert[i].m_texcoord)); COPY_VBO; } else if (flagnb == 4 && has_position && has_normal && has_color && has_texcoord) @@ -343,21 +351,25 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr VertexUsage::Color, VertexUsage::TexCoord)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, - src_mesh->m_vert[i].m_normal, - (u8vec4)(src_mesh->m_vert[i].m_color * 255.f), - src_mesh->m_vert[i].m_texcoord.xy); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + src_mesh->m_vert[i].m_normal, + u8vec4(src_mesh->m_vert[i].m_color * 255.f), + vec2(src_mesh->m_vert[i].m_texcoord.xy))); COPY_VBO; } else if (flagnb == 4 && has_position && has_color && has_texcoord && has_texcoordExt) { new_vdecl = std::make_shared(VertexStream(VertexUsage::Position, VertexUsage::Color, VertexUsage::TexCoord)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_color, src_mesh->m_vert[i].m_texcoord); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + src_mesh->m_vert[i].m_color, + src_mesh->m_vert[i].m_texcoord)); COPY_VBO; } else if (flagnb == 3 && has_position && has_normal && has_color) @@ -368,38 +380,45 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr VertexUsage::Normal, VertexUsage::Color)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, - src_mesh->m_vert[i].m_normal, - (u8vec4)(src_mesh->m_vert[i].m_color * 255.f)); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + src_mesh->m_vert[i].m_normal, + (u8vec4)(src_mesh->m_vert[i].m_color * 255.f))); COPY_VBO; } else if (flagnb == 3 && has_position && has_texcoord && has_texcoordExt) { new_vdecl = std::make_shared(VertexStream(VertexUsage::Position, VertexUsage::TexCoord)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_texcoord); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + src_mesh->m_vert[i].m_texcoord)); COPY_VBO; } else if (flagnb == 2 && has_position && has_texcoord) { new_vdecl = std::make_shared(VertexStream(VertexUsage::Position, VertexUsage::TexCoord)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, src_mesh->m_vert[i].m_texcoord.xy); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + vec2(src_mesh->m_vert[i].m_texcoord.xy))); COPY_VBO; } else if (flagnb == 2 && has_position && has_color) { new_vdecl = std::make_shared(VertexStream(VertexUsage::Position, VertexUsage::Color)); - array vertexlist; + std::vector> vertexlist; for (int i = 0; i < src_mesh->m_vert.count(); i++) - vertexlist.push(src_mesh->m_vert[i].m_coord, (u8vec4)(src_mesh->m_vert[i].m_color * 255.f)); + vertexlist.push_back(std::make_tuple( + src_mesh->m_vert[i].m_coord, + u8vec4(src_mesh->m_vert[i].m_color * 255.f))); COPY_VBO; } else diff --git a/src/easymesh/easymeshrender.h b/src/easymesh/easymeshrender.h index 5bc41721..97b2d220 100644 --- a/src/easymesh/easymeshrender.h +++ b/src/easymesh/easymeshrender.h @@ -132,10 +132,10 @@ private: array> m_gpudata; //uint16_t are the vdecl/vbo flags to avoid copy same vdecl several times. array, std::shared_ptr> m_vdata; - int m_vertexcount; + size_t m_vertexcount; //We only need only one ibo for the whole mesh std::shared_ptr m_ibo; - int m_indexcount; + size_t m_indexcount; }; } /* namespace lol */ diff --git a/src/engine/ticker.cpp b/src/engine/ticker.cpp index 8179f4a9..8fb41408 100644 --- a/src/engine/ticker.cpp +++ b/src/engine/ticker.cpp @@ -12,6 +12,7 @@ #include +#include // std::unordered_set #include #include #include @@ -492,7 +493,7 @@ void ticker_data::collect_garbage() /* Garbage collect objects that can be destroyed. We can do this * before inserting awaiting objects, because only objects already * in the tick lists can be marked for destruction. */ - array destroy_list; + std::unordered_set destroy_list; for (int g = 0; g < (int)tickable::group::all::end; ++g) { for (int i = DEPRECATED_m_list[g].count(); i--;) @@ -528,15 +529,14 @@ void ticker_data::collect_garbage() } } - destroy_list.push_unique(e); + destroy_list.insert(e); } } - if (!!destroy_list.count()) + for (entity* e : destroy_list) { - DEPRECATED_nentities -= destroy_list.count(); - for (entity* e : destroy_list) - delete e; + delete e; + --DEPRECATED_nentities; } } diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index 5f0989d2..d84e0c1c 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -465,24 +465,24 @@ void Shader::SetUniform(ShaderUniform const &uni, TextureUniform tex, int index) * Uniform setters for arrays */ -void Shader::SetUniform(ShaderUniform const &uni, array const &v) +void Shader::SetUniform(ShaderUniform const &uni, std::vector const &v) { - glUniform1fv((GLint)uni.frag, (GLsizei)v.count(), &v[0]); + glUniform1fv((GLint)uni.frag, (GLsizei)v.size(), &v[0]); } -void Shader::SetUniform(ShaderUniform const &uni, array const &v) +void Shader::SetUniform(ShaderUniform const &uni, std::vector const &v) { - glUniform2fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); + glUniform2fv((GLint)uni.frag, (GLsizei)v.size(), &v[0][0]); } -void Shader::SetUniform(ShaderUniform const &uni, array const &v) +void Shader::SetUniform(ShaderUniform const &uni, std::vector const &v) { - glUniform3fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); + glUniform3fv((GLint)uni.frag, (GLsizei)v.size(), &v[0][0]); } -void Shader::SetUniform(ShaderUniform const &uni, array const &v) +void Shader::SetUniform(ShaderUniform const &uni, std::vector const &v) { - glUniform4fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); + glUniform4fv((GLint)uni.frag, (GLsizei)v.size(), &v[0][0]); } void Shader::Bind() const @@ -892,10 +892,13 @@ ShaderBuilder& ShaderBuilder::operator<<(const ShaderProgram program) } //---- -ShaderBuilder& ShaderBuilder::operator<<(ShaderBlock* block) +ShaderBuilder& ShaderBuilder::operator<<(ShaderBlock* new_block) { ASSERT(m_current_program != ShaderProgram::MAX); - m_blocks[m_current_program.ToScalar()].push_unique(block); + for (auto const block : m_blocks[m_current_program.ToScalar()]) + if (block == new_block) + return *this; + m_blocks[m_current_program.ToScalar()].push_back(new_block); return *this; } @@ -903,7 +906,7 @@ ShaderBuilder& ShaderBuilder::operator<<(ShaderBlock* block) ShaderBuilder& ShaderBuilder::operator<<(ShaderBlock const& block) { ASSERT(m_current_program != ShaderProgram::MAX); - m_blocks[m_current_program.ToScalar()].push_unique(new ShaderBlock(block)); + m_blocks[m_current_program.ToScalar()].push_back(new ShaderBlock(block)); return *this; } @@ -976,8 +979,8 @@ std::string ShaderBuilder::Build() //Merge all variables for (int var = 0; var < ShaderVariable::MAX; var++) - for (int block = 0; block < m_blocks[prog].count(); block++) - MergeParameters(m_blocks[prog][block]->m_parameters[var], m_parameters[prog][var]); + for (auto *block : m_blocks[prog]) + MergeParameters(block->m_parameters[var], m_parameters[prog][var]); //Actually write code code += Shader::GetProgramQualifier((ShaderProgram)prog) + "\n"; @@ -1007,19 +1010,19 @@ std::string ShaderBuilder::Build() code += "\n"; //Build Blocks code and add it - array calls; - for (int block = 0; block < m_blocks[prog].count(); block++) + std::vector calls; + for (auto *block : m_blocks[prog]) { std::string call; std::string function; - m_blocks[prog][block]->Build(ShaderProgram(prog), call, function); - calls << call; - if (m_blocks[prog][block]->m_code_custom.length()) + block->Build(ShaderProgram(prog), call, function); + calls.push_back(call); + if (block->m_code_custom.length()) { - code += std::string("//- ") + m_blocks[prog][block]->GetName() + " custom code ----\n"; - code += m_blocks[prog][block]->m_code_custom + "\n\n"; + code += std::string("//- ") + block->GetName() + " custom code ----\n"; + code += block->m_code_custom + "\n\n"; } - code += std::string("//- ") + m_blocks[prog][block]->GetName() + " main code ----\n"; + code += std::string("//- ") + block->GetName() + " main code ----\n"; code += function + "\n\n"; } diff --git a/src/image/codec/zed-image.cpp b/src/image/codec/zed-image.cpp deleted file mode 100644 index 56279bd5..00000000 --- a/src/image/codec/zed-image.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// -// Lol Engine -// -// Copyright © 2010—2020 Sam Hocevar -// © 2009—2014 Benjamin “Touky” Huet -// -// Lol Engine is free software. It comes without any warranty, to -// the extent permitted by applicable law. You can redistribute it -// and/or modify it under the terms of the Do What the Fuck You Want -// to Public License, Version 2, as published by the WTFPL Task Force. -// See http://www.wtfpl.net/ for more details. -// - -#include - -#include - -#include "../../image/resource-private.h" - -namespace lol -{ - -/* - * Image implementation class - */ - -class ZedImageCodec : public ResourceCodec -{ -public: - virtual std::string GetName() { return ""; } - virtual ResourceCodecData* Load(std::string const &path); - virtual bool Save(std::string const &path, ResourceCodecData* data); -}; - -DECLARE_IMAGE_CODEC(ZedImageCodec, 10) - -/* - * Public Image class - */ - -ResourceCodecData* ZedImageCodec::Load(std::string const &path) -{ - if (!ends_with(path, ".RSC")) - return nullptr; - - // Compacter definition - struct CompactSecondary - { - CompactSecondary(int32_t size) { m_size = size; } - int32_t m_size; - array m_tiles; - }; - struct CompactMain - { - CompactMain(int32_t size) { m_size = size; m_count = 0; } - int32_t m_size; - int32_t m_count; - array m_secondary; - }; - struct Compacter2d - { - void PowSetup(int32_t start, int32_t count) - { - for (int i = 0; i < count; i++) - { - m_primary << CompactMain(start << i); - for (int j = 0; j < count; j++) - m_primary.last().m_secondary << CompactSecondary(start << j); - } - } - void StepSetup(int32_t start, int32_t interval, int32_t count) - { - for (int i = 0; i < count; i++) - { - m_primary << CompactMain(start + interval * i); - for (int j = 0; j < count; j++) - m_primary.last().m_secondary << CompactSecondary(start + interval * j); - } - } - void CustomSetup(array custom_list) - { - for (int i = 0; i < custom_list.count(); i++) - { - m_primary << CompactMain(custom_list[i]); - for (int j = 0; j < custom_list.count(); j++) - m_primary.last().m_secondary << CompactSecondary(custom_list[j]); - } - } - void Store(int32_t tile, ivec2 size) - { - for (int i = 0; i < m_primary.count(); i++) - { - if (size.y <= m_primary[i].m_size || i == m_primary.count() - 1) - { - for (int j = 0; j < m_primary[i].m_secondary.count(); j++) - { - if (size.x <= m_primary[i].m_secondary[j].m_size || j == m_primary[i].m_secondary.count() - 1) - { - m_primary[i].m_secondary[j].m_tiles << tile; - m_primary[i].m_count++; - break; - } - } - break; - } - } - } - array m_primary; - }; - - File file; - file.Open(path, FileAccess::Read, true); - - //Put file in memory - long file_size = file.size(); - array file_buffer; - file_buffer.resize(file_size); - file.Read((uint8_t*)&file_buffer[0], file_size); - file.Close(); - - //Get FileCount - uint32_t file_pos = 0; - uint16_t file_count = 0; - memcpy(&file_count, &file_buffer[file_pos], sizeof(uint16_t)); - file_pos += sizeof(uint16_t); - - array file_offset; - file_offset.resize(file_count); - //Get all the file offsets - for (int i = 0; i < file_count; i++) - { - memcpy(&file_offset[i], &file_buffer[file_pos], sizeof(uint32_t)); - file_pos += sizeof(uint32_t); - } - file_offset << file_size; - - // - array tiles; - tiles.reserve(file_count); - - Compacter2d compacter; - compacter.StepSetup(8, 8, 10); - - uint32_t total_size = 0; - array file_convert; - file_convert.reserve(file_size); - array available_sizes; - //got through all the files and store them - for (int i = 0; i < file_count; i++) - { - file_pos = file_offset[i]; - - //Get image size - uint8_t size_x = 0; - uint8_t size_y = 0; - size_y = file_buffer[file_pos++]; - size_x = file_buffer[file_pos++]; - - //special tweak - size_x *= 8; - total_size += (size_x * size_y); - - //Prepare read - uint32_t header_length = (size_y + 5) & 0xFC; - uint32_t data_length = (file_offset[i+1] - file_offset[i]) - header_length; - uint32_t data_pos = file_offset[i] + header_length; - - /* Seems useless in the end - //Retrieve Header & footer - array header_data; - header_data.resize(header_length); - memcpy(&header_data[0], &file_buffer[file_offset[i]], header_length); - array footer_data; - uint32_t footer_length = lol::min((uint32_t)file_buffer.count(), data_pos + data_length + header_length) - (data_pos + data_length); - if (footer_length > 0) - { - footer_data.resize(footer_length); - memcpy(&footer_data[0], &file_buffer[data_pos + data_length], footer_length); - } - */ - - //Prepare buffer and tiles infos - int32_t convert_pos = file_convert.count(); - ivec2 size = ivec2(size_x, size_y); - //store tile in compacter - compacter.Store(tiles.count(), ivec2(size_x, size_y)); - //push tile on the stack - tiles.push(ivec2(file_convert.count(), data_length), ivec2(size_x, size_y)); - file_convert.resize(convert_pos + data_length); - - //Retrieve actual datas - file_pos = data_pos; - memcpy(&file_convert[convert_pos], &file_buffer[file_pos], data_length); - file_pos += data_length; - - //Store size type - { - ivec2 size_16 = size; - int32_t s_16 = 8; - while (1) - { - if (size_16.x < s_16) - { - size_16.x = s_16; - break; - } - s_16 <<= 1; - } - s_16 = 8; - while (1) - { - if (size_16.y < s_16) - { - size_16.y = s_16; - break; - } - s_16 <<= 1; - } - int j = 0; - for (; j < available_sizes.count(); j++) - if (available_sizes[j] == size_16) - break; - if (j >= available_sizes.count()) - available_sizes << size_16; - } - } - - int32_t tex_sqrt = (int32_t)lol::sqrt((float)total_size); - int32_t tex_size = 2; - while (tex_size < tex_sqrt) - tex_size <<= 1; - - //Prepare final image - auto data = new ResourceTilesetData(new image(ivec2(tex_size))); - auto image = data->m_image; - uint8_t *pixels = image->lock(); - - //Data refactor stage - ivec2 pos = ivec2(0); - for (int j = compacter.m_primary.count() - 1; j >= 0; j--) - { - for (int k = compacter.m_primary[j].m_secondary.count() - 1; k >= 0; k--) - { - //Try something smaller - if (pos.x + compacter.m_primary[j].m_secondary[k].m_size >= tex_size) - continue; - - while (compacter.m_primary[j].m_secondary[k].m_tiles.count() > 0) - { - //Try something smaller - if (pos.x + compacter.m_primary[j].m_secondary[k].m_size >= tex_size) - break; - - compacter.m_primary[j].m_count--; - int i = compacter.m_primary[j].m_secondary[k].m_tiles.pop(); - int32_t file_off = std::get<0>(tiles[i])[0]; - ivec2 t_size = std::get<1>(tiles[i]); - - ASSERT(pos.y + t_size.y < tex_size); - - //Move image to texture - int32_t img_off = pos.x + pos.y * tex_size; - - //At this stage image data consists of 4 vertical interlaced blocks - for (int pass = 0; pass < 4; pass++) - { - for (int y_cur = 0; y_cur < t_size.y; y_cur++) - { - for (int x_cur = 0; x_cur < t_size.x / 4; x_cur++) - { - int32_t img_pos = img_off + pass + 4 * x_cur + y_cur * (int32_t)tex_size; - pixels[img_pos] = file_convert[file_off++]; - } - } - } - - //Register new pos and move to next - std::get<0>(tiles[i]) = pos; - pos.x += t_size.x; - } - } - - //Do another loop - if (compacter.m_primary[j].m_count > 0) - { - pos.x = 0; - pos.y += compacter.m_primary[j].m_size; - j++; - } - } - image->unlock(pixels); - - data->m_tiles = tiles; - - return data; -} - -bool ZedImageCodec::Save(std::string const &path, ResourceCodecData* data) -{ - UNUSED(path, data); - /* FIXME: do we need to implement this? */ - return true; -} - -} /* namespace lol */ - diff --git a/src/image/codec/zed-palette-image.cpp b/src/image/codec/zed-palette-image.cpp deleted file mode 100644 index 2d724015..00000000 --- a/src/image/codec/zed-palette-image.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// -// Lol Engine -// -// Copyright © 2009—2014 Benjamin “Touky” Huet -// © 2010—2018 Sam Hocevar -// -// Lol Engine is free software. It comes without any warranty, to -// the extent permitted by applicable law. You can redistribute it -// and/or modify it under the terms of the Do What the Fuck You Want -// to Public License, Version 2, as published by the WTFPL Task Force. -// See http://www.wtfpl.net/ for more details. -// - -#include - -#include - -#include "../../image/resource-private.h" - -namespace lol -{ - -/* - * Image implementation class - */ - -class ZedPaletteImageCodec : public ResourceCodec -{ -public: - virtual std::string GetName() { return ""; } - virtual ResourceCodecData* Load(std::string const &path); - virtual bool Save(std::string const &path, ResourceCodecData* data); -}; - -DECLARE_IMAGE_CODEC(ZedPaletteImageCodec, 10) - -/* - * Public Image class - */ - -ResourceCodecData* ZedPaletteImageCodec::Load(std::string const &path) -{ - if (!ends_with(path, ".pal")) - return nullptr; - - File file; - file.Open(path, FileAccess::Read, true); - - // Put file in memory - long file_size = file.size(); - array file_buffer; - file_buffer.resize(file_size); - file.Read((uint8_t*)&file_buffer[0], file_size); - file.Close(); - -#if 0 //2D PALETTE - int32_t tex_sqrt = (int32_t)lol::sqrt((float)file_size / 3); - int32_t tex_size = 2; - while (tex_size < tex_sqrt) - tex_size <<= 1; - auto data = new ResourceImageData(new image(ivec2(tex_size))); - auto image = data->m_image; -#else - int32_t tex_sqrt = file_size / 3; - int32_t tex_size = 2; - while (tex_size < tex_sqrt) - tex_size <<= 1; - auto data = new ResourceImageData(new image(ivec2(tex_size, 1))); - auto image = data->m_image; -#endif - - u8vec4 *pixels = image->lock(); - for (int i = 0; i < file_buffer.count();) - { - pixels->r = file_buffer[i++]; - pixels->g = file_buffer[i++]; - pixels->b = file_buffer[i++]; - pixels->a = (i == 0) ? 0 : 255; - ++pixels; - } - image->unlock(pixels); - - return data; -} - -bool ZedPaletteImageCodec::Save(std::string const &path, ResourceCodecData* data) -{ - UNUSED(path, data); - /* FIXME: do we need to implement this? */ - return true; -} - -} /* namespace lol */ - diff --git a/src/image/resource.cpp b/src/image/resource.cpp index ab5ec34b..55ac2fb3 100644 --- a/src/image/resource.cpp +++ b/src/image/resource.cpp @@ -47,8 +47,6 @@ static bool RegisterAllCodecs(array &codeclist) #if defined LOL_USE_IMLIB2 REGISTER_IMAGE_CODEC(Imlib2ImageCodec) #endif - REGISTER_IMAGE_CODEC(ZedImageCodec) - REGISTER_IMAGE_CODEC(ZedPaletteImageCodec) REGISTER_IMAGE_CODEC(OricImageCodec) REGISTER_IMAGE_CODEC(DummyImageCodec) diff --git a/src/lol-core.vcxproj b/src/lol-core.vcxproj index 161b1d54..29c7d0d6 100644 --- a/src/lol-core.vcxproj +++ b/src/lol-core.vcxproj @@ -148,8 +148,6 @@ - - diff --git a/src/lol-core.vcxproj.filters b/src/lol-core.vcxproj.filters index b07552aa..9671f142 100644 --- a/src/lol-core.vcxproj.filters +++ b/src/lol-core.vcxproj.filters @@ -122,12 +122,6 @@ image\codec - - image\codec - - - image\codec - image\filter diff --git a/src/lol/base/array.h b/src/lol/base/array.h index fb4d3667..a297b30d 100644 --- a/src/lol/base/array.h +++ b/src/lol/base/array.h @@ -223,15 +223,6 @@ public: *this << x; } - inline bool push_unique(T const &x) - { - if (find(x) != INDEX_NONE) - return false; - - push(x); - return true; - } - inline void insert(T const &x, ptrdiff_t pos) { assert(pos >= 0 && pos <= m_count); diff --git a/src/lol/gpu/shader.h b/src/lol/gpu/shader.h index 0bc8b548..f3b55f57 100644 --- a/src/lol/gpu/shader.h +++ b/src/lol/gpu/shader.h @@ -19,6 +19,7 @@ #include // std::string #include // std::map +#include // std::vector #include // std::shared_ptr #include // int64_t @@ -337,10 +338,10 @@ public: void SetUniform(ShaderUniform const &uni, mat4 const &m); void SetUniform(ShaderUniform const &uni, TextureUniform tex, int index); - void SetUniform(ShaderUniform const &uni, array const &v); - void SetUniform(ShaderUniform const &uni, array const &v); - void SetUniform(ShaderUniform const &uni, array const &v); - void SetUniform(ShaderUniform const &uni, array const &v); + void SetUniform(ShaderUniform const &uni, std::vector const &v); + void SetUniform(ShaderUniform const &uni, std::vector const &v); + void SetUniform(ShaderUniform const &uni, std::vector const &v); + void SetUniform(ShaderUniform const &uni, std::vector const &v); void Bind() const; void Unbind() const; @@ -444,7 +445,7 @@ protected: ShaderProgram m_current_program = ShaderProgram::MAX; //Blocks - array m_blocks[ShaderProgram::MAX]; + std::vector m_blocks[ShaderProgram::MAX]; //Final shader parameters std::map m_parameters[ShaderProgram::MAX][ShaderVariable::MAX]; diff --git a/src/lol/image/resource.h b/src/lol/image/resource.h index f5fcd260..6b82a359 100644 --- a/src/lol/image/resource.h +++ b/src/lol/image/resource.h @@ -18,12 +18,14 @@ // —————————————————— // -#include <../legacy/lol/math/arraynd.h> #include #include <../legacy/lol/math/geometry.h> #include #include <../legacy/lol/image/pixel.h> +#include // std::vector +#include // std::string + namespace lol { //ResourceCodecData ----------------------------------------------------------- @@ -60,7 +62,7 @@ namespace lol : ResourceImageData(img) { } - array m_tiles; + std::vector m_tiles; }; //ResourceLoader -------------------------------------------------------------- diff --git a/src/lol/sys/file.h b/src/lol/sys/file.h index 1948855d..a1f7d8c2 100644 --- a/src/lol/sys/file.h +++ b/src/lol/sys/file.h @@ -18,6 +18,7 @@ // #include // std::string +#include // std::vector #include // std::map #include // int64_t @@ -105,11 +106,11 @@ public: void Close(); private: - bool GetContent(array* files, array* directories); + bool GetContent(std::vector* files, std::vector* directories); public: - bool GetContent(array& files, array& directories); - bool GetContent(array& directories); - bool GetContent(array& files); + bool GetContent(std::vector& files, std::vector& directories); + bool GetContent(std::vector& directories); + bool GetContent(std::vector& files); std::string GetName(); long int GetModificationTime(); diff --git a/src/lol/sys/init.h b/src/lol/sys/init.h index 53421f7c..d28a610d 100644 --- a/src/lol/sys/init.h +++ b/src/lol/sys/init.h @@ -18,7 +18,7 @@ // #include // std::string -#include // std::getenv +#include // std::vector namespace lol { @@ -54,7 +54,7 @@ extern void init(int argc, char *argv[], std::string const &sourcesubdir = LOL_CONFIG_SOURCESUBDIR); extern void add_data_dir(std::string const &dir); -extern array get_path_list(std::string const &file); +extern std::vector get_path_list(std::string const &file); } /* namespace sys */ diff --git a/src/mesh/primitivemesh.cpp b/src/mesh/primitivemesh.cpp index 78af560c..b8a8c123 100644 --- a/src/mesh/primitivemesh.cpp +++ b/src/mesh/primitivemesh.cpp @@ -71,15 +71,21 @@ void PrimitiveMesh::Render(Scene& scene, std::shared_ptr primit u_normalmat = shader->GetUniformLocation("u_normalmat"); /* Per-scene environment */ - array const &lights = scene.GetLights(); - array light_data; + std::vector const &lights = scene.GetLights(); + std::vector light_data; /* FIXME: the 4th component of the position can be used for other things */ /* FIXME: GetUniform("blabla") is costly */ for (auto l : lights) - light_data << vec4(l->GetPosition(), (float)l->GetType()) << l->GetColor(); - while (light_data.count() < LOL_MAX_LIGHT_COUNT) - light_data << vec4::zero << vec4::zero; + { + light_data.push_back(vec4(l->GetPosition(), (float)l->GetType())); + light_data.push_back(l->GetColor()); + } + while (light_data.size() < LOL_MAX_LIGHT_COUNT) + { + light_data.push_back(vec4::zero); + light_data.push_back(vec4::zero); + } ShaderUniform u_lights = shader->GetUniformLocation("u_lights"); shader->SetUniform(u_lights, light_data); diff --git a/src/scene.cpp b/src/scene.cpp index 63fd8bc0..51a659b1 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -38,9 +38,9 @@ namespace lol * The global g_scenes object, initialised by Video::Init */ -array Scene::g_scenes; +std::vector Scene::g_scenes; -static array g_scene_displays; +static std::vector g_scene_displays; static inline void gpu_marker(char const *message) { @@ -58,18 +58,16 @@ static inline void gpu_marker(char const *message) void SceneDisplay::Add(SceneDisplay* display) { - g_scene_displays << display; + g_scene_displays.push_back(display); } -int SceneDisplay::GetCount() +size_t SceneDisplay::GetCount() { - return g_scene_displays.count(); + return g_scene_displays.size(); } SceneDisplay* SceneDisplay::GetDisplay(int index) { - ASSERT(0 <= index && index < g_scene_displays.count(), - "invalid display index %d", index); return g_scene_displays[index]; } @@ -108,7 +106,7 @@ void PrimitiveRenderer::Render(Scene& scene, std::shared_ptr pr uint64_t Scene::g_used_id = 1; mutex Scene::g_prim_mutex; -std::map>> Scene::g_prim_sources; +std::map>> Scene::g_prim_sources; /* * Public Scene class @@ -135,11 +133,11 @@ Scene::Scene(ivec2 size) m_pp.m_buffer_uni[1][1] = m_pp.pp_shader->GetUniformLocation("u_prev_buffer"); m_pp.m_buffer_uni[1][2] = m_pp.pp_shader->GetUniformLocation("u_prev_final"); - array quad { vec2( 1.0, 1.0), vec2(-1.0, -1.0), vec2( 1.0, -1.0), - vec2(-1.0, -1.0), vec2( 1.0, 1.0), vec2(-1.0, 1.0), }; + std::vector quad { vec2( 1.0, 1.0), vec2(-1.0, -1.0), vec2( 1.0, -1.0), + vec2(-1.0, -1.0), vec2( 1.0, 1.0), vec2(-1.0, 1.0), }; - m_pp.quad_vbo = std::make_shared(quad.bytes()); - m_pp.quad_vbo->set_data(quad.data(), quad.bytes()); + m_pp.quad_vbo = std::make_shared(quad.size() * sizeof(vec2)); + m_pp.quad_vbo->set_data(quad.data(), quad.size() * sizeof(vec2)); /* Create a default orthographic camera, in case the user doesn’t. */ m_default_cam = new Camera(); @@ -177,35 +175,36 @@ Scene::~Scene() void Scene::AddNew(ivec2 size) { - Scene::g_scenes << new Scene(size); + Scene::g_scenes.push_back(new Scene(size)); } void Scene::DestroyScene(Scene* scene) { - Scene::g_scenes.remove_item(scene); + remove_item(Scene::g_scenes, scene); delete scene; } void Scene::DestroyAll() { - while (Scene::g_scenes.count()) - delete Scene::g_scenes.pop(); + while (Scene::g_scenes.size()) + { + delete Scene::g_scenes.back(); + Scene::g_scenes.pop_back(); + } } -int Scene::GetCount() +size_t Scene::GetCount() { - return g_scenes.count(); + return g_scenes.size(); } bool Scene::IsReady(int index) { - return 0 <= index && index < g_scenes.count() && !!g_scenes[index]; + return 0 <= index && index < int(g_scenes.size()) && !!g_scenes[index]; } Scene& Scene::GetScene(int index) { - ASSERT(0 <= index && index < g_scenes.count() && !!g_scenes[index], - "Trying to get a non-existent scene %d", index); return *g_scenes[index]; } @@ -221,28 +220,28 @@ bool Scene::IsRelevant(entity* entity) Camera* Scene::GetCamera(int cam_idx) { - return (0 <= cam_idx && cam_idx < m_camera_stack.count()) ? + return (0 <= cam_idx && cam_idx < int(m_camera_stack.size())) ? m_camera_stack[cam_idx] : - m_camera_stack.last(); + m_camera_stack.back(); } int Scene::PushCamera(Camera *cam) { Ticker::Ref(cam); - m_camera_stack.push(cam); - return (int)m_camera_stack.count() - 1; + m_camera_stack.push_back(cam); + return int(m_camera_stack.size()) - 1; } void Scene::PopCamera(Camera *cam) { /* Parse from the end because that’s probably where we’ll find * our camera first. */ - for (int i = m_camera_stack.count(); i--;) + for (size_t i = m_camera_stack.size(); i--;) { if (m_camera_stack[i] == cam) { Ticker::Unref(cam); - m_camera_stack.remove(i); + remove_at(m_camera_stack, i); return; } } @@ -260,7 +259,7 @@ void Scene::Reset() /* New scenegraph: Release fire&forget primitives */ for (uintptr_t key : keys(m_prim_renderers)) { - for (int idx = 0; idx < m_prim_renderers[key].count(); ++idx) + for (size_t idx = 0; idx < m_prim_renderers[key].size(); ++idx) if (m_prim_renderers[key][idx]->m_fire_and_forget) ReleasePrimitiveRenderer(idx--, key); } @@ -278,7 +277,7 @@ int Scene::HasPrimitiveSource(uintptr_t key) int count; g_prim_mutex.lock(); { - count = g_prim_sources[key].count(); + count = int(g_prim_sources[key].size()); } g_prim_mutex.unlock(); return count; @@ -289,8 +288,8 @@ int Scene::AddPrimitiveSource(uintptr_t key, std::shared_ptr so int count; g_prim_mutex.lock(); { - count = g_prim_sources[key].count(); - g_prim_sources[key].push(source); + count = int(g_prim_sources[key].size()); + g_prim_sources[key].push_back(source); } g_prim_mutex.unlock(); return count; @@ -306,7 +305,7 @@ void Scene::SetPrimitiveSource(int index, uintptr_t key, std::shared_ptr old; g_prim_mutex.lock(); { - ASSERT(0 <= index && index < g_prim_sources[key].count()); + ASSERT(0 <= index && index < int(g_prim_sources[key].size())); old = g_prim_sources[key][index]; - g_prim_sources[key].remove(index); + remove_at(g_prim_sources[key], index); } g_prim_mutex.unlock(); } @@ -330,13 +329,13 @@ void Scene::ReleasePrimitiveSource(int index, uintptr_t key) void Scene::ReleaseAllPrimitiveSources(uintptr_t key) { // Delete oldies AFTER having released the lock - array> oldies; + std::vector> oldies; g_prim_mutex.lock(); { - oldies.reserve(g_prim_sources[key].count()); + oldies.reserve(g_prim_sources[key].size()); for (auto source : g_prim_sources[key]) - oldies << source; + oldies.push_back(source); g_prim_sources[key].clear(); } g_prim_mutex.unlock(); @@ -348,13 +347,13 @@ void Scene::ReleaseAllPrimitiveSources(uintptr_t key) int Scene::HasPrimitiveRenderer(uintptr_t key) { - return m_prim_renderers[key].count(); + return int(m_prim_renderers[key].size()); } void Scene::AddPrimitiveRenderer(uintptr_t key, std::shared_ptr renderer) { renderer->m_fire_and_forget = true; - m_prim_renderers[key].push(renderer); + m_prim_renderers[key].push_back(renderer); } void Scene::SetPrimitiveRenderer(int index, uintptr_t key, std::shared_ptr renderer) @@ -362,16 +361,14 @@ void Scene::SetPrimitiveRenderer(int index, uintptr_t key, std::shared_ptr= 0); - if (index >= m_prim_renderers[key].count()) + if (index >= int(m_prim_renderers[key].size())) m_prim_renderers[key].resize(index + 1); m_prim_renderers[key][index] = renderer; } void Scene::ReleasePrimitiveRenderer(int index, uintptr_t key) { - ASSERT(0 <= index && index < m_prim_renderers[key].count()); - - m_prim_renderers[key].remove(index); + remove_at(m_prim_renderers[key], index); } void Scene::ReleaseAllPrimitiveRenderers(uintptr_t key) @@ -403,29 +400,29 @@ void Scene::AddTile(TileSet *tileset, int id, mat4 model) t.m_id = id; if (tileset->GetPalette()) - m_tile_api.m_palettes.push(t); + m_tile_api.m_palettes.push_back(t); else - m_tile_api.m_tiles.push(t); + m_tile_api.m_tiles.push_back(t); } void Scene::AddLine(vec3 a, vec3 b, vec4 col) { struct line l { a, b, col, -1.f, 0xFFFFFFFF, false, false }; - m_line_api.m_lines.push(l); + m_line_api.m_lines.push_back(l); } void Scene::AddLine(vec3 a, vec3 b, vec4 col, float duration, uint32_t mask) { struct line l { a, b, col, duration, mask, false, false }; - m_line_api.m_lines.push(l); + m_line_api.m_lines.push_back(l); } void Scene::AddLight(Light *l) { - m_tile_api.m_lights.push(l); + m_tile_api.m_lights.push_back(l); } -array const &Scene::GetLights() +std::vector const &Scene::GetLights() { return m_tile_api.m_lights; } @@ -570,11 +567,11 @@ void Scene::render_primitives() /* new scenegraph */ for (uintptr_t key : keys(m_prim_renderers)) { - for (int idx = 0; idx < m_prim_renderers[key].count(); ++idx) + for (size_t idx = 0; idx < m_prim_renderers[key].size(); ++idx) { /* TODO: Not sure if thread compliant */ std::shared_ptr source; - if (idx < g_prim_sources[key].count()) + if (idx < g_prim_sources[key].size()) source = g_prim_sources[key][idx]; m_prim_renderers[key][idx]->Render(*this, source); } @@ -586,7 +583,7 @@ void Scene::render_tiles() // XXX: rename to Blit() render_context rc(m_renderer); /* Early test if nothing needs to be rendered */ - if (!m_tile_api.m_tiles.count() && !m_tile_api.m_palettes.count()) + if (m_tile_api.m_tiles.empty() && m_tile_api.m_palettes.empty()) return; /* FIXME: we disable culling for now because we don’t have a reliable @@ -600,7 +597,7 @@ void Scene::render_tiles() // XXX: rename to Blit() if (!m_tile_api.m_shader) m_tile_api.m_shader = Shader::Create(LOLFX_RESOURCE_NAME(gpu_tile)); - if (!m_tile_api.m_palette_shader && m_tile_api.m_palettes.count()) + if (!m_tile_api.m_palette_shader && !m_tile_api.m_palettes.empty()) m_tile_api.m_palette_shader = Shader::Create(LOLFX_RESOURCE_NAME(gpu_palette)); for (int p = 0; p < 2; p++) @@ -608,7 +605,7 @@ void Scene::render_tiles() // XXX: rename to Blit() auto shader = (p == 0) ? m_tile_api.m_shader : m_tile_api.m_palette_shader; auto &tiles = (p == 0) ? m_tile_api.m_tiles : m_tile_api.m_palettes; - if (tiles.count() == 0) + if (tiles.empty()) continue; ShaderUniform uni_mat, uni_tex, uni_pal, uni_texsize; @@ -629,10 +626,10 @@ void Scene::render_tiles() // XXX: rename to Blit() uni_pal = m_tile_api.m_palette_shader ? m_tile_api.m_palette_shader->GetUniformLocation("u_palette") : ShaderUniform(); uni_texsize = shader->GetUniformLocation("u_texsize"); - for (int buf = 0, i = 0, n; i < tiles.count(); i = n, buf += 2) + for (size_t buf = 0, i = 0, n; i < tiles.size(); i = n, buf += 2) { /* Count how many quads will be needed */ - for (n = i + 1; n < tiles.count(); n++) + for (n = i + 1; n < tiles.size(); n++) if (tiles[i].m_tileset != tiles[n].m_tileset) break; @@ -642,10 +639,10 @@ void Scene::render_tiles() // XXX: rename to Blit() auto vb2 = std::make_shared(6 * (n - i) * sizeof(vec2)); vec2 *texture = (vec2 *)vb2->lock(0, 0); - m_tile_api.m_bufs.push(vb1); - m_tile_api.m_bufs.push(vb2); + m_tile_api.m_bufs.push_back(vb1); + m_tile_api.m_bufs.push_back(vb2); - for (int j = i; j < n; j++) + for (size_t j = i; j < n; j++) { tiles[i].m_tileset->BlitTile(tiles[j].m_id, tiles[j].m_model, vertex + 6 * (j - i), texture + 6 * (j - i)); @@ -698,7 +695,7 @@ void Scene::render_lines(float seconds) { render_context rc(m_renderer); - if (!m_line_api.m_lines.count()) + if (m_line_api.m_lines.empty()) return; rc.depth_func(DepthFunc::LessOrEqual); @@ -706,17 +703,17 @@ void Scene::render_lines(float seconds) rc.blend_equation(BlendEquation::Add, BlendEquation::Max); rc.alpha_func(AlphaFunc::GreaterOrEqual, 0.01f); - int linecount = (int)m_line_api.m_lines.count(); + size_t linecount = m_line_api.m_lines.size(); if (!m_line_api.m_shader) m_line_api.m_shader = Shader::Create(LOLFX_RESOURCE_NAME(gpu_line)); - array buff; + std::vector> buff; buff.resize(linecount); int real_linecount = 0; mat4 const inv_view_proj = inverse(GetCamera()->GetProjection() * GetCamera()->GetView()); UNUSED(inv_view_proj); - for (int i = 0; i < linecount; i++) + for (size_t i = 0; i < linecount; i++) { if (m_line_api.m_lines[i].mask & m_line_api.m_debug_mask) { @@ -729,12 +726,12 @@ void Scene::render_lines(float seconds) m_line_api.m_lines[i].duration -= seconds; if (m_line_api.m_lines[i].duration < 0.f) { - m_line_api.m_lines.remove_swap(i--); + remove_at(m_line_api.m_lines, i--); linecount--; } } - auto vb = std::make_shared(buff.bytes()); - vb->set_data(buff.data(), buff.bytes()); + auto vb = std::make_shared(buff.size() * sizeof(buff[0])); + vb->set_data(buff.data(), buff.size() * sizeof(buff[0])); m_line_api.m_shader->Bind(); diff --git a/src/scene.h b/src/scene.h index afb36c56..e8e73da5 100644 --- a/src/scene.h +++ b/src/scene.h @@ -18,9 +18,6 @@ // --------------- // -#include -#include - #include "light.h" #include "camera.h" #include "mesh/mesh.h" @@ -29,6 +26,10 @@ #include #include +#include // std::vector +#include // std::shared_ptr +#include // uintptr_t + #define LOL_MAX_LIGHT_COUNT 8 namespace lol @@ -87,7 +88,7 @@ public: /* TODO: Should that be there or in Video ? */ static void Add(SceneDisplay* display); - static int GetCount(); + static size_t GetCount(); static SceneDisplay* GetDisplay(int index = 0); static void DestroyAll(); @@ -105,7 +106,7 @@ class Scene friend class Video; private: - static array g_scenes; + static std::vector g_scenes; Scene(ivec2 size); ~Scene(); @@ -117,7 +118,7 @@ private: //Private because I don't know if we should have it private: static void DestroyAll(); public: - static int GetCount(); + static size_t GetCount(); static bool IsReady(int index = 0); static Scene& GetScene(int index = 0); @@ -248,7 +249,7 @@ public: void AddLine(vec3 a, vec3 b, vec4 color, float duration, uint32_t mask); void AddLight(Light *light); - array const &GetLights(); + std::vector const &GetLights(); /* === Render stuff === */ void SetDisplay(SceneDisplay* display); @@ -303,12 +304,12 @@ private: * - Updated by entity * - Marked Fire&Forget * - Scene is destroyed */ - std::map>> m_prim_renderers; - static std::map>> g_prim_sources; + std::map>> m_prim_renderers; + static std::map>> g_prim_sources; static mutex g_prim_mutex; Camera *m_default_cam; - array m_camera_stack; + std::vector m_camera_stack; struct line { @@ -324,7 +325,7 @@ private: { //float m_duration, m_segment_size; //vec4 m_color; - array m_lines; + std::vector m_lines; int /*m_mask,*/ m_debug_mask; std::shared_ptr m_shader; std::shared_ptr m_vdecl; @@ -335,15 +336,15 @@ private: struct tile_api { int m_cam; - array m_tiles; - array m_palettes; - array m_lights; + std::vector m_tiles; + std::vector m_palettes; + std::vector m_lights; std::shared_ptr m_shader; std::shared_ptr m_palette_shader; std::shared_ptr m_vdecl; - array> m_bufs; + std::vector> m_bufs; } m_tile_api; }; diff --git a/src/sys/file.cpp b/src/sys/file.cpp index 9c7ef004..a9cb540d 100644 --- a/src/sys/file.cpp +++ b/src/sys/file.cpp @@ -125,12 +125,12 @@ class FileData std::string ReadString() { - array buf; + std::vector buf; buf.resize(BUFSIZ); std::string ret; while (IsValid()) { - int done = Read(&buf[0], buf.count()); + int done = Read(&buf[0], buf.size()); if (done <= 0) break; @@ -139,7 +139,7 @@ class FileData ret.resize(oldsize + done); memcpy(&ret[oldsize], &buf[0], done); - buf.resize(buf.count() * 3 / 2); + buf.resize(buf.size() * 3 / 2); } return ret; } @@ -393,7 +393,8 @@ class DirectoryData #endif } - bool GetContentList(array* files, array* directories) + bool GetContentList(std::vector* files, + std::vector* directories) { if (!IsValid()) return false; @@ -415,12 +416,12 @@ class DirectoryData if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (directories) - *directories << std::string(find_data.cFileName); + directories->push_back(std::string(find_data.cFileName)); } else { if (files) - *files << std::string(find_data.cFileName); + files->push_back(std::string(find_data.cFileName)); } } //Go for next one @@ -429,7 +430,7 @@ class DirectoryData #elif HAVE_STDIO_H /* FIXME: not implemented */ #endif - return ((files && files->count()) || (directories && directories->count())); + return ((files && !files->empty()) || (directories && !directories->empty())); } inline bool IsValid() const @@ -536,37 +537,39 @@ void Directory::Close() } //-- -bool Directory::GetContent(array* files, array* directories) +bool Directory::GetContent(std::vector* files, + std::vector* directories) { - array sfiles, sdirectories; + std::vector sfiles, sdirectories; bool found_some = m_data->GetContentList(&sfiles, &sdirectories); UNUSED(found_some); if (directories) - for (int i = 0; i < sdirectories.count(); i++) - directories->push(Directory(m_name + sdirectories[i])); + for (auto const &sdir : sdirectories) + directories->push_back(Directory(m_name + sdir)); if (files) - for (int i = 0; i < sfiles.count(); i++) - files->push(m_name + sfiles[i]); + for (auto const &sfile : sfiles) + files->push_back(m_name + sfile); - return (files && files->count()) || (directories || directories->count()); + return (files && !files->empty()) || (directories && !directories->size()); } //-- -bool Directory::GetContent(array& files, array& directories) +bool Directory::GetContent(std::vector& files, + std::vector& directories) { return GetContent(&files, &directories); } //-- -bool Directory::GetContent(array& directories) +bool Directory::GetContent(std::vector& directories) { return GetContent(nullptr, &directories); } //-- -bool Directory::GetContent(array& files) +bool Directory::GetContent(std::vector& files) { return GetContent(&files, nullptr); } diff --git a/src/sys/init.cpp b/src/sys/init.cpp index 1c6fcb49..0bfd1faf 100644 --- a/src/sys/init.cpp +++ b/src/sys/init.cpp @@ -12,6 +12,8 @@ #include +#include // std::vector +#include // std::string #include #if HAVE_UNISTD_H @@ -36,7 +38,7 @@ namespace sys # define SEPARATOR '/' #endif -static array data_dir; +static std::vector data_dir; void init(int argc, char *argv[], std::string const &projectdir, @@ -151,8 +153,8 @@ void init(int argc, char *argv[], } msg::debug("binary dir: “%s”\n", binarydir.c_str()); - for (int i = 0; i < data_dir.count(); ++i) - msg::debug("data dir %d/%d: “%s”\n", i + 1, data_dir.count(), + for (int i = 0; i < int(data_dir.size()); ++i) + msg::debug("data dir %d/%d: “%s”\n", i + 1, int(data_dir.size()), data_dir[i].c_str()); } @@ -162,22 +164,20 @@ void init(int argc, char *argv[], void add_data_dir(std::string const &dir) { - data_dir << dir; + data_dir.push_back(dir); } -array get_path_list(std::string const &file) +std::vector get_path_list(std::string const &file) { - array ret; + std::vector ret; /* If not an absolute path, look through known data directories */ if (file[0] != '/') - { - for (int i = 0; i < data_dir.count(); ++i) - ret << data_dir[i] + file; - } + for (auto const &dir : data_dir) + ret.push_back(dir + file); #if !__NX__ - ret << file; + ret.push_back(file); #endif return ret; diff --git a/src/tileset.cpp b/src/tileset.cpp index 69767a51..23ac9195 100644 --- a/src/tileset.cpp +++ b/src/tileset.cpp @@ -41,7 +41,7 @@ class TileSetData protected: /* Pixels, then texture coordinates */ - array m_tiles; + std::vector> m_tiles; ivec2 m_tile_size; }; @@ -61,13 +61,13 @@ TileSet *TileSet::create(std::string const &path, image* img) return ret ? ret : tileset_cache.set(path, new TileSet(path, img)); } -TileSet *TileSet::create(std::string const &path, image* img, array& tiles) +TileSet *TileSet::create(std::string const &path, image* img, std::vector& tiles) { auto ret = tileset_cache.get(path); if (!ret) { ret = tileset_cache.set(path, new TileSet(path, img)); - ret->define_tile(tiles); + ret->define_tiles_by_box(tiles); } return ret; } @@ -163,7 +163,7 @@ void TileSet::Init(std::string const &path, ResourceCodecData* loaded_data) auto tileset_data = dynamic_cast(loaded_data); if (tileset_data != nullptr) { - define_tile(tileset_data->m_tiles); + define_tiles_by_box(tileset_data->m_tiles); } m_data->m_name = " " + path; @@ -192,10 +192,10 @@ void TileSet::clear_all() int TileSet::define_tile(ibox2 rect) { - m_tileset_data->m_tiles.push(rect, + m_tileset_data->m_tiles.push_back(std::make_tuple(rect, box2((vec2)rect.aa / (vec2)m_data->m_texture_size, - (vec2)rect.bb / (vec2)m_data->m_texture_size)); - return m_tileset_data->m_tiles.count() - 1; + (vec2)rect.bb / (vec2)m_data->m_texture_size))); + return int(m_tileset_data->m_tiles.size()) - 1; } void TileSet::define_tile(ivec2 count) @@ -210,25 +210,15 @@ void TileSet::define_tile(ivec2 count) } } -void TileSet::define_tile(array& tiles) +void TileSet::define_tiles_by_box(std::vector& tiles) { - for (int i = 0; i < tiles.count(); i++) - define_tile(tiles[i]); -} - -void TileSet::define_tile(array& tiles) -{ - for (int i = 0; i < tiles.count(); i++) - { - auto const &a = std::get<0>(tiles[i]); - auto const &b = std::get<1>(tiles[i]); - define_tile(ibox2(a, a + b)); - } + for (auto const &t : tiles) + define_tile(t); } int TileSet::GetTileCount() const { - return m_tileset_data->m_tiles.count(); + return int(m_tileset_data->m_tiles.size()); } ivec2 TileSet::GetTileSize(int tileid) const diff --git a/src/tileset.h b/src/tileset.h index 2a7fb69d..94152adf 100644 --- a/src/tileset.h +++ b/src/tileset.h @@ -30,6 +30,8 @@ */ #include "textureimage.h" +#include // std::vector + namespace lol { @@ -43,7 +45,7 @@ class TileSet : public TextureImage public: static TileSet *create(std::string const &path); static TileSet *create(std::string const &path, image* img); - static TileSet *create(std::string const &path, image* img, array& tiles); + static TileSet *create(std::string const &path, image* img, std::vector& tiles); /* Old style: path to PNG file */ static TileSet *create(std::string const &path, ivec2 size, ivec2 count); @@ -69,8 +71,7 @@ public: void clear_all(); int define_tile(ibox2 rect); void define_tile(ivec2 count); - void define_tile(array& tiles); - void define_tile(array& tiles); + void define_tiles_by_box(std::vector& tiles); int GetTileCount() const; ivec2 GetTileSize(int tileid) const; ibox2 GetTilePixel(int tileid) const;