Skip to content

Commit

Permalink
Rust renderer stub
Browse files Browse the repository at this point in the history
  • Loading branch information
lpenguin committed Dec 30, 2021
1 parent 40c518e commit 91882b2
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/renderer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ SET(renderer_SRCS
src/renderer/scene/sokol/MapUpdater.cpp
src/renderer/scene/dummy/DummyRenderer.cpp
src/renderer/scene/dummy/DummyRenderer.h
src/renderer/scene/rust/RustRenderer.cpp
src/renderer/scene/rust/RustRenderer.h
src/renderer/scene/rust/vange_rs.h
)


Expand Down
88 changes: 88 additions & 0 deletions lib/renderer/src/renderer/scene/rust/RustRenderer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#include "RustRenderer.h"
#include "vange_rs.h"

using namespace renderer;
using namespace renderer::scene;
using namespace renderer::scene::rust;

void RustRenderer::camera_create(const CameraDescription& camera_description)
{
vange_rs_camera_description v_desc {
.fov = camera_description.fov,
.aspect = camera_description.aspect,
.near= camera_description.near,
.far = camera_description.far,
};

vange_rs_camera_create(v_desc);
}

void RustRenderer::camera_destroy()
{
vange_rs_camera_destroy();
}

void RustRenderer::camera_set_transform(const Transform& transform)
{
vange_rs_transform v_transform {
.position = vange_rs_vector3 {
.x = transform.position.x,
.y = transform.position.y,
.z = transform.position.z,
},
.rotation = vange_rs_quaternion {
.x = transform.rotation.x,
.y = transform.rotation.y,
.z = transform.rotation.z,
.w = transform.rotation.w,
}
};
vange_rs_camera_set_transform(v_transform);
}

void RustRenderer::map_create(const MapDescription& map_description)
{
vange_rs_map_description v_desc {
.width = map_description.width,
.height = map_description.height,
.lineT = map_description.lineT,
.material_begin_offsets = map_description.material_begin_offsets,
.material_end_offsets = map_description.material_end_offsets,
.material_count = map_description.material_count,
};
vange_rs_map_create(v_desc);
}

void RustRenderer::map_destroy()
{
vange_rs_map_destroy();
}

void RustRenderer::map_request_update(const Rect& region)
{
vange_rs_rect v_rect {
.x = region.x,
.y = region.y,
.width = region.width,
.height = region.height,
};

vange_rs_map_request_update(v_rect);
}

void RustRenderer::map_update_palette(uint32_t* palette, int32_t palette_size)
{
vange_rs_map_update_palette(palette, palette_size);
}

void RustRenderer::render(const Rect& viewport)
{
vange_rs_rect v_rect {
.x = viewport.x,
.y = viewport.y,
.width = viewport.width,
.height = viewport.height,
};
vange_rs_render(v_rect);
}

22 changes: 22 additions & 0 deletions lib/renderer/src/renderer/scene/rust/RustRenderer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef RUSTRENDERER_H
#define RUSTRENDERER_H

#include "../AbstractRenderer.h"

namespace renderer::scene::rust {
class RustRenderer: public AbstractRenderer
{
public:
void camera_create(const CameraDescription& camera_description) override;
void camera_destroy() override;
void camera_set_transform(const Transform& transform) override;
void map_create(const MapDescription& map_description) override;
void map_destroy() override;
void map_request_update(const Rect& region) override;
void map_update_palette(uint32_t* palette, int32_t palette_size) override;
void render(const Rect& viewport) override;
};

}

#endif // RUSTRENDERER_H
82 changes: 82 additions & 0 deletions lib/renderer/src/renderer/scene/rust/vange_rs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#ifndef VANGE_RS_H
#define VANGE_RS_H

#include <cstdint>

/**
This is a stub file for the upcoming vange-rs library bindings
**/

// TODO: agree on how we deal with structs
struct vange_rs_camera_description {
float fov;
float aspect;
float near;
float far;
};

struct vange_rs_vector3 {
float x;
float y;
float z;
};

struct vange_rs_quaternion {
float x;
float y;
float z;
float w;
};

struct vange_rs_transform {
vange_rs_vector3 position;
vange_rs_quaternion rotation;
};

struct vange_rs_map_description {
int32_t width; // H_SIZE
int32_t height; // V_SIZE

// data layout: first `width` bytes are height, the rest `width` bytes are meta data
uint8_t** lineT;

// Material offsets in the palette
uint8_t* material_begin_offsets;
uint8_t* material_end_offsets;

// 8 for world, 16 for escave
int32_t material_count;
};

// TODO: or it could be left, bottom, right, top
struct vange_rs_rect {
int32_t x;
int32_t y;
int32_t width;
int32_t height;
};


// TODO: pointer?
void vange_rs_camera_create(vange_rs_camera_description desc);

void vange_rs_camera_destroy();

// TODO: pointer?
void vange_rs_camera_set_transform(vange_rs_transform transform);

// TODO: pointer?
void vange_rs_map_create(vange_rs_map_description map_description);

void vange_rs_map_destroy();

void vange_rs_map_query(int32_t* width, int32_t* height);

// TODO: pointer?
void vange_rs_map_request_update(vange_rs_rect region);

void vange_rs_map_update_palette(uint32_t* palette, int32_t palette_size);

// TODO: pointer?
void vange_rs_render(vange_rs_rect viewport);
#endif // VANGE_RS_H

0 comments on commit 91882b2

Please sign in to comment.