Started obj port and gave up.

This commit is contained in:
zy4n
2025-03-31 21:41:24 +02:00
parent 0acfe36118
commit bc065bc657
20 changed files with 422 additions and 593 deletions

View File

@@ -9,6 +9,8 @@
#include <mutex>
#include <execution>
#include "util/string_lookup.hpp"
namespace assets::language
{
enum class declaration_type : std::size_t
@@ -88,13 +90,11 @@ std::error_code assets::glsl_parser::load(
m_path_buffer.clear();
lookups.shader_sources.by_extension(".glsl", m_path_buffer);
auto store_mutex = std::mutex{};
std::for_each(
std::execution::parallel_unsequenced_policy{},
m_path_buffer.begin(),
m_path_buffer.end(),
parser_context{ store, store_mutex }
parser_context{ store }
);
return {};
@@ -102,9 +102,8 @@ std::error_code assets::glsl_parser::load(
assets::glsl_parser::parser_context::parser_context(
store_type& m_store,
std::mutex& m_store_mutex
) : m_store{ &m_store }, m_store_mutex{ &m_store_mutex }
store_type& m_store
) : m_store{ &m_store }
{
m_buffer.source.reserve(4096);
m_value_buffer.reserve(64);
@@ -142,16 +141,13 @@ void assets::glsl_parser::parser_context::operator()(lookup_type::const_pointer
remove_metadata_declarations();
{
auto lock = std::lock_guard{ *m_store_mutex };
m_store->insert(id, m_buffer);
}
m_store->insert(id, m_buffer);
}
void assets::glsl_parser::parser_context::tokenize_declarations()
{
auto source_rest = std::string_view( m_buffer.source.data(), m_buffer.source.size() );
auto source_rest = std::string_view{ m_buffer.source.data(), m_buffer.source.size() };
auto offset = std::string_view::size_type{};
while ((offset = source_rest.find(language::declaration_prefix)) != std::string_view::npos)
@@ -237,7 +233,7 @@ bool assets::glsl_parser::parser_context::parse_metadata_from_tokens()
);
const auto value_token_count = m_declaration_value_count_buffer[index];
if (not parser(std::span(m_value_buffer).subspan(value_token_offset, value_token_count), m_buffer))
if (not parser(std::span(m_value_buffer).subspan(value_token_offset, value_token_count), m_buffer.meta))
{
return false;
}
@@ -353,7 +349,7 @@ std::error_code assets::glsl_parser::read_file(
bool assets::glsl_parser::parse_geometry_declaration(
const std::span<const std::string_view> values,
model_geometry::types& geometry_type
shader_source_data::metadata& meta
) {
if (values.size() != 1)
@@ -366,7 +362,7 @@ bool assets::glsl_parser::parse_geometry_declaration(
if (const auto it = language::geometry_lookup.find(value); it != language::geometry_lookup.end())
{
geometry_type = it->second;
meta.geometry_type = it->second;
}
else
{
@@ -379,7 +375,7 @@ bool assets::glsl_parser::parse_geometry_declaration(
bool assets::glsl_parser::parse_stage_declaration(
const std::span<const std::string_view> values,
shader_components::stage& stage
shader_source_data::metadata& meta
) {
if (values.size() != 1)
@@ -392,7 +388,7 @@ bool assets::glsl_parser::parse_stage_declaration(
if (const auto it = language::stage_lookup.find(value); it != language::stage_lookup.end())
{
stage = it->second;
meta.stage = it->second;
}
else
{
@@ -405,23 +401,23 @@ bool assets::glsl_parser::parse_stage_declaration(
bool assets::glsl_parser::parse_components_declaration(
const std::span<const std::string_view> values,
shader_source_data& buffer
shader_source_data::metadata& meta
) {
return parse_component_tokens(values, buffer.geometry_type, buffer.components);
return parse_component_tokens(values, meta.geometry_type, meta.components);
}
bool assets::glsl_parser::parse_static_enable_declaration(
const std::span<const std::string_view> values,
shader_source_data& buffer
shader_source_data::metadata& meta
) {
return parse_component_tokens(values, buffer.geometry_type, buffer.static_enable);
return parse_component_tokens(values, meta.geometry_type, meta.static_enable);
}
bool assets::glsl_parser::parse_dynamic_enable_declaration(
const std::span<const std::string_view> values,
shader_source_data& buffer
shader_source_data::metadata& meta
) {
return parse_component_tokens(values, buffer.geometry_type, buffer.dynamic_enable);
return parse_component_tokens(values, meta.geometry_type, meta.dynamic_enable);
}
bool assets::glsl_parser::parse_component_tokens(