USDA parser refactoring(W.I.P.)

This commit is contained in:
Syoyo Fujita
2022-07-16 19:51:17 +09:00
parent 9f92455ee9
commit 05f8e93682
7 changed files with 2064 additions and 8213 deletions

View File

@@ -51,7 +51,7 @@ option(TINYUSDZ_PRODUCTION_BUILD
"Build for production release(e.g. disables debug print, do not include full filepath in error messages)" OFF) "Build for production release(e.g. disables debug print, do not include full filepath in error messages)" OFF)
# -- modules -- # -- modules --
option(TINYUSDZ_WITH_MODULE_USDA_PARSER "Build with USDA parser feature" ON) option(TINYUSDZ_WITH_MODULE_USDA_READER "Build with USDA reader feature" ON)
option(TINYUSDZ_WITH_MODULE_USDA_WRITER "Build with USDA writer feature" ON) option(TINYUSDZ_WITH_MODULE_USDA_WRITER "Build with USDA writer feature" ON)
# USDC(Crate binary) reader is mandatory in most situation, so this option is primarily for developer build. # USDC(Crate binary) reader is mandatory in most situation, so this option is primarily for developer build.
@@ -149,7 +149,8 @@ endif()
set(TINYUSDZ_SOURCES set(TINYUSDZ_SOURCES
${PROJECT_SOURCE_DIR}/src/tinyusdz.cc ${PROJECT_SOURCE_DIR}/src/tinyusdz.cc
${PROJECT_SOURCE_DIR}/src/usda-parser.cc ${PROJECT_SOURCE_DIR}/src/ascii-parser.cc
${PROJECT_SOURCE_DIR}/src/usda-reader.cc
${PROJECT_SOURCE_DIR}/src/usdc-reader.cc ${PROJECT_SOURCE_DIR}/src/usdc-reader.cc
${PROJECT_SOURCE_DIR}/src/usda-writer.cc ${PROJECT_SOURCE_DIR}/src/usda-writer.cc
${PROJECT_SOURCE_DIR}/src/usdc-writer.cc ${PROJECT_SOURCE_DIR}/src/usdc-writer.cc
@@ -402,9 +403,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
endif() endif()
# default = enable module, so invert definition # default = enable module, so invert definition
if (NOT TINYUSDZ_WITH_MODULE_USDA_PARSER) if (NOT TINYUSDZ_WITH_MODULE_USDA_READER)
target_compile_definitions(${TINYUSDZ_LIB_TARGET} target_compile_definitions(${TINYUSDZ_LIB_TARGET}
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_PARSER") PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_READER")
endif() endif()
if (NOT TINYUSDZ_WITH_MODULE_USDA_WRITER) if (NOT TINYUSDZ_WITH_MODULE_USDA_WRITER)
@@ -412,9 +413,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_WRITER") PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_WRITER")
endif() endif()
if (NOT TINYUSDZ_WITH_MODULE_USDC_PARSER) if (NOT TINYUSDZ_WITH_MODULE_USDC_READER)
target_compile_definitions(${TINYUSDZ_LIB_TARGET} target_compile_definitions(${TINYUSDZ_LIB_TARGET}
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_PARSER") PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_READER")
endif() endif()
if (NOT TINYUSDZ_WITH_MODULE_USDC_WRITER) if (NOT TINYUSDZ_WITH_MODULE_USDC_WRITER)
@@ -528,7 +529,7 @@ if(TINYUSDZ_WITH_PYTHON AND (NOT TINYUSDZ_WITH_BLENDER_ADDON))
endif() endif()
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_PARSER) if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_READER)
add_executable(usda_parser add_executable(usda_parser
${CMAKE_CURRENT_SOURCE_DIR}/sandbox/usda/parser-main.cc) ${CMAKE_CURRENT_SOURCE_DIR}/sandbox/usda/parser-main.cc)
add_sanitizers(usda_parser) add_sanitizers(usda_parser)
@@ -583,7 +584,7 @@ if(TINYUSDZ_BUILD_TESTS)
# #
# USDA parser tester # USDA parser tester
# #
if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_PARSER) if(TINYUSDZ_WITH_TOOL_USDA_PARSER AND TINYUSDZ_WITH_MODULE_USDA_READER)
add_test( add_test(
NAME usda-parser-unit-test NAME usda-parser-unit-test
COMMAND python ${PROJECT_SOURCE_DIR}/tests/usda/unit-runner.py --app COMMAND python ${PROJECT_SOURCE_DIR}/tests/usda/unit-runner.py --app

View File

@@ -2,7 +2,7 @@
#include <fstream> #include <fstream>
#include "stream-reader.hh" #include "stream-reader.hh"
#include "usda-parser.hh" #include "usda-reader.hh"
#include "io-util.hh" #include "io-util.hh"
@@ -24,17 +24,17 @@ int main(int argc, char **argv) {
} }
tinyusdz::StreamReader sr(data.data(), data.size(), /* swap endian */ false); tinyusdz::StreamReader sr(data.data(), data.size(), /* swap endian */ false);
tinyusdz::usda::USDAParser parser(&sr); tinyusdz::usda::USDAReader reader(&sr);
std::cout << "Basedir = " << base_dir << "\n"; std::cout << "Basedir = " << base_dir << "\n";
parser.SetBaseDir(base_dir); reader.SetBaseDir(base_dir);
{ {
bool ret = parser.Parse(); bool ret = reader.Read();
if (!ret) { if (!ret) {
std::cerr << "Failed to parse .usda: \n"; std::cerr << "Failed to parse .usda: \n";
std::cerr << parser.GetError() << "\n"; std::cerr << reader.GetError() << "\n";
return -1; return -1;
} else { } else {
std::cout << "ok\n"; std::cout << "ok\n";

View File

@@ -12,13 +12,14 @@ cd ${builddir} && CXX=clang++ CC=clang cmake \
-DTINYUSDZ_WITH_OPENSUBDIV=0 \ -DTINYUSDZ_WITH_OPENSUBDIV=0 \
-DTINYUSDZ_WITH_AUDIO=0 \ -DTINYUSDZ_WITH_AUDIO=0 \
-DTINYUSDZ_WITH_EXR=0 \ -DTINYUSDZ_WITH_EXR=0 \
-DTINYUSDZ_WITH_MODULE_USDA_PARSER=0 \ -DTINYUSDZ_WITH_MODULE_USDA_READER=1 \
-DTINYUSDZ_WITH_MODULE_USDA_WRITER=0 \ -DTINYUSDZ_WITH_MODULE_USDA_WRITER=1 \
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=0 \ -DTINYUSDZ_WITH_MODULE_USDC_READER=1 \
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=1 \
-DTINYUSDZ_WITH_PYTHON=0 \ -DTINYUSDZ_WITH_PYTHON=0 \
-DTINYUSDZ_WITH_USDOBJ=0 \ -DTINYUSDZ_WITH_USDOBJ=0 \
-DTINYUSDZ_WITH_USDVOX=0 \ -DTINYUSDZ_WITH_USDVOX=0 \
-DTINYUSDZ_COMPILE_TIME_TRACE=1 \ -DTINYUSDZ_COMPILE_TIME_TRACE=0 \
-DSANITIZE_ADDRESS=0 \ -DSANITIZE_ADDRESS=0 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
.. ..

View File

@@ -50,7 +50,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "tinyusdz.hh" #include "tinyusdz.hh"
#include "io-util.hh" #include "io-util.hh"
#include "pprinter.hh" #include "pprinter.hh"
#include "usda-parser.hh" #include "usda-reader.hh"
#include "usdc-reader.hh" #include "usdc-reader.hh"
#if defined(TINYUSDZ_SUPPORT_AUDIO) #if defined(TINYUSDZ_SUPPORT_AUDIO)
@@ -678,19 +678,19 @@ bool LoadUSDAFromMemory(const uint8_t *addr, const size_t length, const std::str
} }
tinyusdz::StreamReader sr(addr, length, /* swap endian */ false); tinyusdz::StreamReader sr(addr, length, /* swap endian */ false);
tinyusdz::usda::USDAParser parser(&sr); tinyusdz::usda::USDAReader reader(&sr);
parser.SetBaseDir(base_dir); reader.SetBaseDir(base_dir);
(void)options; (void)options;
{ {
bool ret = parser.Parse(); bool ret = reader.Read();
if (!ret) { if (!ret) {
if (err) { if (err) {
(*err) += "Failed to parse USDA\n"; (*err) += "Failed to parse USDA\n";
(*err) += parser.GetError(); (*err) += reader.GetError();
} }
return false; return false;

File diff suppressed because it is too large Load Diff

2030
src/usda-reader.cc Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,8 @@
#include "tinyusdz.hh" #include "tinyusdz.hh"
#include "stream-reader.hh" #include "stream-reader.hh"
#include "ascii-parser.hh"
namespace tinyusdz { namespace tinyusdz {
namespace usda { namespace usda {
@@ -21,19 +23,19 @@ enum LoadState {
/// ///
bool IsUSDA(const std::string &filename, size_t max_filesize = 0); bool IsUSDA(const std::string &filename, size_t max_filesize = 0);
class USDAParser { class USDAReader {
public: public:
struct ParseState { struct ParseState {
int64_t loc{-1}; // byte location in StreamReder int64_t loc{-1}; // byte location in StreamReder
}; };
USDAParser() = delete; USDAReader() = delete;
USDAParser(tinyusdz::StreamReader *sr); USDAReader(tinyusdz::StreamReader *sr);
USDAParser(const USDAParser &rhs) = delete; USDAReader(const USDAReader &rhs) = delete;
USDAParser(USDAParser &&rhs) = delete; USDAReader(USDAReader &&rhs) = delete;
~USDAParser(); ~USDAReader();
/// ///
@@ -47,9 +49,9 @@ class USDAParser {
bool CheckHeader(); bool CheckHeader();
/// ///
/// Parser entry point /// Reader entry point
/// ///
bool Parse(LoadState state = LOAD_STATE_TOPLEVEL); bool Read(LoadState state = LOAD_STATE_TOPLEVEL);
/// ///
/// ///