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)
|
"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
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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 \
|
||||||
..
|
..
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
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 "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);
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
Reference in New Issue
Block a user