#define GLFW_EXPOSE_NATIVE_WIN32 #define TINYGLTF_IMPLEMENTATION #define STBI_MSC_SECURE_CRT #define STB_IMAGE_IMPLEMENTATION #define STB_IMAGE_WRITE_IMPLEMENTATION #include #include #include #include #undef GLFW_EXPOSE_NATIVE_WIN32 #undef TINYGLTF_IMPLEMENTATION #undef STBI_MSC_SECURE_CRT #undef STB_IMAGE_IMPLEMENTATION #undef STB_IMAGE_WRITE_IMPLEMENTATION #include #include #include "Viewer.h" static void onError(int error, const char* message) { spdlog::error("[{}] {}", error, message); } static void onRender(Viewer* pViewer, double deltaTime) { pViewer->update(deltaTime); pViewer->render(deltaTime); } int main(int argc, char* argv[]) { tinygltf::TinyGLTF context; tinygltf::Model model; std::string error; std::string warning; if (!context.LoadASCIIFromFile(&model, &error, &warning, argv[1])) { if (!error.empty()) { spdlog::error("{}", error); } if (!warning.empty()) { spdlog::warn("{}", warning); } exit(EXIT_FAILURE); } GLFWwindow* pWindow; glfwSetErrorCallback(onError); if (!glfwInit()) { spdlog::error("Fail to initialize GLFW!!!"); exit(EXIT_FAILURE); } glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); pWindow = glfwCreateWindow(512, 512, "dxview", nullptr, nullptr); if (!pWindow) { spdlog::error("Fail to create GLFWwindow!!!"); glfwTerminate(); exit(EXIT_FAILURE); } auto pViewer = std::make_unique(glfwGetWin32Window(pWindow), &model); if (!pViewer) { spdlog::error("Fail to create Viewer"); glfwDestroyWindow(pWindow); glfwTerminate(); exit(EXIT_FAILURE); } auto prevTimeStamp = glfwGetTime(); while (!glfwWindowShouldClose(pWindow)) { auto currTimeStamp = glfwGetTime(); onRender(pViewer.get(), currTimeStamp - prevTimeStamp); prevTimeStamp = currTimeStamp; glfwPollEvents(); } glfwDestroyWindow(pWindow); glfwTerminate(); exit(EXIT_SUCCESS); }