Golias Engine
A C++ 20 'game engine' built with SDL3 with wide platform support.
assimp_io.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "stdafx.h"
4 
5 #include <assimp/IOStream.hpp>
6 #include <assimp/IOSystem.hpp>
7 #include <string>
8 #include <memory>
9 
10 class FileAccess;
11 
16 class SDLIOStream : public Assimp::IOStream {
17 public:
18  SDLIOStream(const std::string& path, const std::string& mode);
19  ~SDLIOStream() override;
20 
21  size_t Read(void* pvBuffer, size_t pSize, size_t pCount) override;
22  size_t Write(const void* pvBuffer, size_t pSize, size_t pCount) override;
23  aiReturn Seek(size_t pOffset, aiOrigin pOrigin) override;
24  size_t Tell() const override;
25  size_t FileSize() const override;
26  void Flush() override;
27 
28  std::unique_ptr<FileAccess> m_file;
29  std::string m_path;
30  size_t m_position = 0;
31 };
32 
38 class SDLIOSystem : public Assimp::IOSystem {
39 public:
40  explicit SDLIOSystem(const std::string& base_path);
41  ~SDLIOSystem() override;
42 
43  bool Exists(const char* pFile) const override;
44  char getOsSeparator() const override;
45  Assimp::IOStream* Open(const char* pFile, const char* pMode = "rb") override;
46  void Close(Assimp::IOStream* pFile) override;
47 
48 private:
49  std::string m_base_path;
50 };
A RAII wrapper for SDL3 file operations supporting read/write access.
Definition: file_system.h:64
Custom Assimp IOStream implementation using SDL file access.
Definition: assimp_io.h:16
void Flush() override
Definition: assimp_io.cpp:78
std::unique_ptr< FileAccess > m_file
Definition: assimp_io.h:28
size_t FileSize() const override
Definition: assimp_io.cpp:71
std::string m_path
Definition: assimp_io.h:29
aiReturn Seek(size_t pOffset, aiOrigin pOrigin) override
Definition: assimp_io.cpp:43
~SDLIOStream() override
Definition: assimp_io.cpp:16
size_t Tell() const override
Definition: assimp_io.cpp:67
size_t Read(void *pvBuffer, size_t pSize, size_t pCount) override
Definition: assimp_io.cpp:20
SDLIOStream(const std::string &path, const std::string &mode)
Definition: assimp_io.cpp:5
size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) override
Definition: assimp_io.cpp:38
size_t m_position
Definition: assimp_io.h:30
Custom Assimp IOSystem implementation for asset loading.
Definition: assimp_io.h:38
char getOsSeparator() const override
Definition: assimp_io.cpp:100
void Close(Assimp::IOStream *pFile) override
Definition: assimp_io.cpp:120
~SDLIOSystem() override
Definition: assimp_io.cpp:90
SDLIOSystem(const std::string &base_path)
Definition: assimp_io.cpp:82
bool Exists(const char *pFile) const override
Definition: assimp_io.cpp:94
Assimp::IOStream * Open(const char *pFile, const char *pMode="rb") override
Definition: assimp_io.cpp:108