mirror of
https://github.com/lighttransport/tinyusdz.git
synced 2026-01-18 01:11:17 +01:00
USDA parser refactoring(W.I.P.)
This commit is contained in:
@@ -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)
|
||||
|
||||
# -- 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)
|
||||
|
||||
# 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
|
||||
${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/usda-writer.cc
|
||||
${PROJECT_SOURCE_DIR}/src/usdc-writer.cc
|
||||
@@ -402,9 +403,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
|
||||
endif()
|
||||
|
||||
# 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}
|
||||
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_PARSER")
|
||||
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_READER")
|
||||
endif()
|
||||
|
||||
if (NOT TINYUSDZ_WITH_MODULE_USDA_WRITER)
|
||||
@@ -412,9 +413,9 @@ foreach(TINYUSDZ_LIB_TARGET ${TINYUSDZ_LIBS})
|
||||
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDA_WRITER")
|
||||
endif()
|
||||
|
||||
if (NOT TINYUSDZ_WITH_MODULE_USDC_PARSER)
|
||||
if (NOT TINYUSDZ_WITH_MODULE_USDC_READER)
|
||||
target_compile_definitions(${TINYUSDZ_LIB_TARGET}
|
||||
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_PARSER")
|
||||
PRIVATE "TINYUSDZ_DISABLE_MODULE_USDC_READER")
|
||||
endif()
|
||||
|
||||
if (NOT TINYUSDZ_WITH_MODULE_USDC_WRITER)
|
||||
@@ -528,7 +529,7 @@ if(TINYUSDZ_WITH_PYTHON AND (NOT TINYUSDZ_WITH_BLENDER_ADDON))
|
||||
|
||||
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
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sandbox/usda/parser-main.cc)
|
||||
add_sanitizers(usda_parser)
|
||||
@@ -583,7 +584,7 @@ if(TINYUSDZ_BUILD_TESTS)
|
||||
#
|
||||
# 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(
|
||||
NAME usda-parser-unit-test
|
||||
COMMAND python ${PROJECT_SOURCE_DIR}/tests/usda/unit-runner.py --app
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include <fstream>
|
||||
|
||||
#include "stream-reader.hh"
|
||||
#include "usda-parser.hh"
|
||||
#include "usda-reader.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::usda::USDAParser parser(&sr);
|
||||
tinyusdz::usda::USDAReader reader(&sr);
|
||||
|
||||
std::cout << "Basedir = " << base_dir << "\n";
|
||||
parser.SetBaseDir(base_dir);
|
||||
reader.SetBaseDir(base_dir);
|
||||
|
||||
{
|
||||
bool ret = parser.Parse();
|
||||
bool ret = reader.Read();
|
||||
|
||||
if (!ret) {
|
||||
std::cerr << "Failed to parse .usda: \n";
|
||||
std::cerr << parser.GetError() << "\n";
|
||||
std::cerr << reader.GetError() << "\n";
|
||||
return -1;
|
||||
} else {
|
||||
std::cout << "ok\n";
|
||||
|
||||
@@ -12,13 +12,14 @@ cd ${builddir} && CXX=clang++ CC=clang cmake \
|
||||
-DTINYUSDZ_WITH_OPENSUBDIV=0 \
|
||||
-DTINYUSDZ_WITH_AUDIO=0 \
|
||||
-DTINYUSDZ_WITH_EXR=0 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDA_PARSER=0 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDA_WRITER=0 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=0 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDA_READER=1 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDA_WRITER=1 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDC_READER=1 \
|
||||
-DTINYUSDZ_WITH_MODULE_USDC_WRITER=1 \
|
||||
-DTINYUSDZ_WITH_PYTHON=0 \
|
||||
-DTINYUSDZ_WITH_USDOBJ=0 \
|
||||
-DTINYUSDZ_WITH_USDVOX=0 \
|
||||
-DTINYUSDZ_COMPILE_TIME_TRACE=1 \
|
||||
-DTINYUSDZ_COMPILE_TIME_TRACE=0 \
|
||||
-DSANITIZE_ADDRESS=0 \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
..
|
||||
|
||||
@@ -50,7 +50,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include "tinyusdz.hh"
|
||||
#include "io-util.hh"
|
||||
#include "pprinter.hh"
|
||||
#include "usda-parser.hh"
|
||||
#include "usda-reader.hh"
|
||||
#include "usdc-reader.hh"
|
||||
|
||||
#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::usda::USDAParser parser(&sr);
|
||||
tinyusdz::usda::USDAReader reader(&sr);
|
||||
|
||||
parser.SetBaseDir(base_dir);
|
||||
reader.SetBaseDir(base_dir);
|
||||
|
||||
(void)options;
|
||||
|
||||
{
|
||||
bool ret = parser.Parse();
|
||||
bool ret = reader.Read();
|
||||
|
||||
if (!ret) {
|
||||
if (err) {
|
||||
(*err) += "Failed to parse USDA\n";
|
||||
(*err) += parser.GetError();
|
||||
(*err) += reader.GetError();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
8183
src/usda-parser.cc
8183
src/usda-parser.cc
File diff suppressed because it is too large
Load Diff
2030
src/usda-reader.cc
Normal file
2030
src/usda-reader.cc
Normal file
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,8 @@
|
||||
#include "tinyusdz.hh"
|
||||
#include "stream-reader.hh"
|
||||
|
||||
#include "ascii-parser.hh"
|
||||
|
||||
namespace tinyusdz {
|
||||
|
||||
namespace usda {
|
||||
@@ -21,19 +23,19 @@ enum LoadState {
|
||||
///
|
||||
bool IsUSDA(const std::string &filename, size_t max_filesize = 0);
|
||||
|
||||
class USDAParser {
|
||||
class USDAReader {
|
||||
public:
|
||||
struct ParseState {
|
||||
int64_t loc{-1}; // byte location in StreamReder
|
||||
};
|
||||
|
||||
USDAParser() = delete;
|
||||
USDAParser(tinyusdz::StreamReader *sr);
|
||||
USDAReader() = delete;
|
||||
USDAReader(tinyusdz::StreamReader *sr);
|
||||
|
||||
USDAParser(const USDAParser &rhs) = delete;
|
||||
USDAParser(USDAParser &&rhs) = delete;
|
||||
USDAReader(const USDAReader &rhs) = delete;
|
||||
USDAReader(USDAReader &&rhs) = delete;
|
||||
|
||||
~USDAParser();
|
||||
~USDAReader();
|
||||
|
||||
|
||||
///
|
||||
@@ -47,9 +49,9 @@ class USDAParser {
|
||||
bool CheckHeader();
|
||||
|
||||
///
|
||||
/// Parser entry point
|
||||
/// Reader entry point
|
||||
///
|
||||
bool Parse(LoadState state = LOAD_STATE_TOPLEVEL);
|
||||
bool Read(LoadState state = LOAD_STATE_TOPLEVEL);
|
||||
|
||||
///
|
||||
///
|
||||
Reference in New Issue
Block a user