Jackalope / jrf (public) (License: GPLv3 or later version) (since 2019-11-21) (hash sha1)
Libriary for reading and writing resource files: vertices, indices, meshes, images, models and scene data.
Supports reading from filesystem as well as from zip files.
It uses unique binary container format for those resources.
It is used in tool for converting popular formats like wavefront .obj file, TARGA image to this container and also used in resource loader as part of graphics framework.

It requires jlib libriary (see my user repositories) and libzip.
It is possible to remove libzip dependency.
List of commits:
Subject Hash Author Date (UTC)
scene improvements, changed shift type to unsigned, set default-value funtions, model must be path a2708b94b88eb0ede73b9aab396e7a13f13baa52 Your Name 2019-11-29 09:27:32
separate function for str reading 9127f9a18f9f4974975fa35d58f596952b6aa4e5 Your Name 2019-11-29 09:26:43
new result errors ef56e017e2e761fdf23c6a64ed33277c98569e13 Your Name 2019-11-29 09:26:12
new types for Scene e2fde0d2b66e125ba3bfd86b8f51c81ecb5ab047 Your Name 2019-11-29 00:38:27
shift scale added to Scene 974752944e73bbc2949ff399ab9d806baeeab751 Your Name 2019-11-29 00:38:06
new resource type - scene - list of models f3eea43135dad8b3e24cf6683e5abc1a5e2e57ad Your Name 2019-11-28 07:59:59
model correctly handling error returns 3df9ec0f9abed56709b8b9556a5291217ad8744d Your Name 2019-11-28 07:59:25
updated jlib 2a28ba18170dc757f7bad931a12a34ee3e7e1c46 Your Name 2019-11-27 03:44:11
replaced free with jl::deallocate ab8d6cb89f814227c280797dbe654971a85264a6 Your Name 2019-11-25 07:29:05
second initial commit fb7a7e999477c84f10b3d618f6b00347fd0a9ca7 Your Name 2019-11-23 01:38:14
initial commit 3dc064f64d245d1dddcbdf8493b0be0a321cb65d Your Name 2019-11-22 20:10:24
Commit a2708b94b88eb0ede73b9aab396e7a13f13baa52 - scene improvements, changed shift type to unsigned, set default-value funtions, model must be path
Author: Your Name
Author date (UTC): 2019-11-29 09:27
Committer name: Your Name
Committer date (UTC): 2019-11-29 09:27
Parent(s): 9127f9a18f9f4974975fa35d58f596952b6aa4e5
Signing key:
Tree: 2f88cc1589cd3f172202734f94816e195b6f7bac
File Lines added Lines deleted
include/jrf/scene.h 36 20
File include/jrf/scene.h changed (mode: 100644) (index 63f49c5..de9fc6c)
... ... namespace jrf { struct Scene; struct SceneEntry; }
6 6
7 7 struct jrf::SceneEntry struct jrf::SceneEntry
8 8 { {
9 Model model;
10 jl::array<float, 3> pos; ///< position
11 jl::array<uint32_t,3> shift; ///< shift of position
12 jl::array<float, 9> transform; ///< transformation matrix 3x3
9 struct Options {
10 void set_default()
11 {
12 pos = {};
13 shift = {};
14 transform = {};
15 transform[0] = transform[4] = transform[8] = 1;
16 }
17
18 jl::array<float, 3> pos; ///< position
19 jl::array<int32_t,3> shift; ///< shift of position
20 jl::array<float, 9> transform; ///< transformation matrix 3x3
21 };
13 22
14 void destroy() { model.destroy(); }
23 void destroy() { model_path.destroy(); }
24
25 Options options;
26 jl::string model_path;
15 27
16 28 template<typename IO = jl::io_agent> template<typename IO = jl::io_agent>
17 29 [[nodiscard]] Result read(IO *p_mediator) [[nodiscard]] Result read(IO *p_mediator)
18 30 { {
19 Result res = model.read(p_mediator);
31 Result res = read_str(p_mediator, &model_path);
20 32 if (res != Result::SUCCESS) if (res != Result::SUCCESS)
21 33 return res; return res;
22 34
23 35 jl::io_agent_alt<IO> *p_io = p_mediator; jl::io_agent_alt<IO> *p_io = p_mediator;
24 if (not p_io->read_items(&pos))
25 return Result::MEDIATOR_ERROR;
26 if (not p_io->read_items(&shift))
27 return Result::MEDIATOR_ERROR;
28 if (p_io->read_items(&transform))
29 return Result::MEDIATOR_ERROR;
36 if (not p_io->read_items(&options.pos))
37 goto CANCEL;
38 if (not p_io->read_items(&options.shift))
39 goto CANCEL;
40 if (p_io->read_items(&options.transform))
41 goto CANCEL;
30 42
31 43 return Result::SUCCESS; return Result::SUCCESS;
44
45 CANCEL: destroy();
46 return Result::MEDIATOR_ERROR;
32 47 } }
33 48 template<typename IO = jl::io_agent> template<typename IO = jl::io_agent>
34 49 [[nodiscard]] Result write(IO *p_mediator) const [[nodiscard]] Result write(IO *p_mediator) const
35 50 { {
36 Result res = model.write(p_mediator);
37 if (res != Result::SUCCESS)
38 return res;
51 if (p_mediator->write(model_path.begin(), model_path.size())
52 != int64_t(model_path.size()))
53 return Result::MEDIATOR_ERROR;
39 54
40 55 auto *p_io = jl::io_agent_p_alt_cast(p_mediator); auto *p_io = jl::io_agent_p_alt_cast(p_mediator);
41 if (not p_io->write_items(&pos))
56 if (not p_io->write_items(&options.pos))
42 57 return Result::MEDIATOR_ERROR; return Result::MEDIATOR_ERROR;
43 if (not p_io->write_items(&shift))
58 if (not p_io->write_items(&options.shift))
44 59 return Result::MEDIATOR_ERROR; return Result::MEDIATOR_ERROR;
45 if (p_io->write_items(&transform))
60 if (not p_io->write_items(&options.transform))
46 61 return Result::MEDIATOR_ERROR; return Result::MEDIATOR_ERROR;
47 62
48 63 return Result::SUCCESS; return Result::SUCCESS;
 
... ... struct jrf::SceneEntry
53 68 struct jrf::Scene struct jrf::Scene
54 69 { {
55 70 struct Options { struct Options {
56 jl::array<uint32_t, 3> shift; ///< global shift of scene
57 uint32_t shift_scale;///< scale applied to total shift
71 void set_default_value() { *this = {{}, 1 }; }
72 jl::array<int32_t, 3> shift; ///< global shift of scene
73 int32_t shift_scale;///< scale applied to total shift
58 74 }; };
59 75
60 76 Options options; Options options;
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/Jackalope/jrf

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jrf

Clone this repository using git:
git clone git://git.rocketgit.com/user/Jackalope/jrf

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main