mirror of
https://github.com/syoyo/tinygltf.git
synced 2026-09-22 18:24:39 +00:00
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);
|
|
} |