mirror of
https://github.com/syoyo/tinygltf.git
synced 2026-09-15 23:04:35 +00:00
Move tiny_gltf.h/.cc, tinygltf_json.h, json.hpp, stb_image*, loader_example.cc, examples/, wasm/, experimental/, legacy tests and fuzzers under attic/. TinyGLTF v3 C (tiny_gltf_v3.h/.c + tinygltf_json_c.h) is now the mainline: - CMakeLists.txt: v3 C tests only, installs only v3 files - tests/Makefile and Makefile: build/run the v3 C testers - test_runner.py: verifies v3 C tester output only (no v1 ground truth) - CI workflows: build and test v3 C only (GCC/Clang/MSVC/Meson/sanitizers) - README: v3 C quick start, testing, licenses; legacy moved to attic/
90 lines
2.0 KiB
C++
90 lines
2.0 KiB
C++
#define GLFW_EXPOSE_NATIVE_WIN32
|
|
#define TINYGLTF_IMPLEMENTATION
|
|
#define STBI_MSC_SECURE_CRT
|
|
#define STB_IMAGE_IMPLEMENTATION
|
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
|
|
|
#include <GLFW/glfw3.h>
|
|
#include <GLFW/glfw3native.h>
|
|
#include <spdlog/spdlog.h>
|
|
#include <tiny_gltf.h>
|
|
|
|
#undef GLFW_EXPOSE_NATIVE_WIN32
|
|
#undef TINYGLTF_IMPLEMENTATION
|
|
#undef STBI_MSC_SECURE_CRT
|
|
#undef STB_IMAGE_IMPLEMENTATION
|
|
#undef STB_IMAGE_WRITE_IMPLEMENTATION
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
#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<Viewer>(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);
|
|
} |