Started obj port and gave up.
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user