tutorial 04

This commit is contained in:
h4570
2022-08-22 23:23:51 +02:00
parent 4fa65fc535
commit d469e78747
26 changed files with 400 additions and 96 deletions
@@ -39,13 +39,16 @@ class DynamicPipeline : public Renderer3DPipeline {
void onUse();
void onFrameEnd();
void onUseEnd();
/**
* Render dynamic model.
* This render() method is a bridge to core.render() method.
*/
void render(const DynamicMesh& mesh, const DynPipOptions* options = nullptr);
void render(const DynamicMesh* mesh);
void render(const DynamicMesh* mesh, const DynPipOptions& options);
void render(const DynamicMesh* mesh, const DynPipOptions* options = nullptr);
private:
@@ -33,6 +33,7 @@ class MinecraftPipeline : public Renderer3DPipeline {
void onUse();
void onUseEnd();
void onFrameEnd();
/**
* @brief Render voxels
@@ -21,6 +21,7 @@ class Renderer3DPipeline {
virtual void setRenderer(RendererCore* core) = 0;
virtual void onUse() = 0;
virtual void onFrameEnd() = 0;
virtual void onUseEnd() = 0;
std::function<void(Renderer3DPipeline*)> onDestroy;
};
@@ -28,7 +28,8 @@ class StaPipCore {
void init(RendererCore* t_core);
/** Render 3D via "bags" */
void render(StaPipBag* bag, StaPipBagPackagesBBox* bbox = nullptr);
void render(StaPipBag* bag, StaPipBagPackagesBBox* bbox,
const u32& maxVertCount);
/** Get max vert count of VU1 qbuffer (for optimizations) */
u32 getMaxVertCountByParams(const bool& isSingleColor,
@@ -0,0 +1,48 @@
/*
# _____ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2022, tyra - https://github.com/h4570/tyra
# Licensed under Apache License 2.0
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
*/
#pragma once
#include <tamtypes.h>
#include "core/bag/packaging/stapip_bag_packages_bbox.hpp"
#include "renderer/3d/mesh/mesh.hpp"
#include <memory>
#include <vector>
namespace Tyra {
struct StapipBagBBoxesCacheItem {
u32 vu1MaxVertCount;
u32 frameId;
std::unique_ptr<StaPipBagPackagesBBox> bboxes;
int framesLeftToDestroy;
};
class StapipBagBBoxesCacher {
public:
StapipBagBBoxesCacher();
~StapipBagBBoxesCacher();
const int cacheFramesCount = 50;
const int cacheSecondsCount = 5;
void onFrameEnd();
StaPipBagPackagesBBox* getBBoxesByMesh(const MeshMaterialFrame* frame,
const u32& maxVertCount);
private:
StapipBagBBoxesCacheItem* getCache(const u32& maxVertCount,
const u32& frameId);
std::vector<StapipBagBBoxesCacheItem> storage;
};
} // namespace Tyra
@@ -17,6 +17,7 @@
#include "renderer/3d/mesh/static/static_mesh.hpp"
#include "./core/stapip_core.hpp"
#include "./stapip_options.hpp"
#include "./stapip_bag_bboxes_cacher.hpp"
namespace Tyra {
@@ -38,17 +39,19 @@ class StaticPipeline : public Renderer3DPipeline {
void setRenderer(RendererCore* core);
void onUse();
void onUseEnd();
void onFrameEnd();
/**
* Render static model
* This render() method is a bridge to core.render() method.
*/
void render(const StaticMesh& mesh, const StaPipOptions* options = nullptr);
void render(const StaticMesh* mesh);
void render(const StaticMesh* mesh, const StaPipOptions& options);
void render(const StaticMesh* mesh, const StaPipOptions* options = nullptr);
private:
StapipBagBBoxesCacher cacher;
RendererCore* rendererCore;
Vec4* colorsCache;
@@ -65,6 +68,7 @@ class StaticPipeline : public Renderer3DPipeline {
const MeshMaterialFrame* materialFrame);
StaPipLightingBag* getLightingBag(const MeshMaterialFrame* materialFrame,
PipelineDirLightsBag* dirLightsBag,
M4x4* model,
const StaPipOptions* options) const;
+6 -2
View File
@@ -23,12 +23,16 @@ class Renderer3D {
Renderer3DUtility utility;
void init(RendererCore* core);
/** Deinitialize previous pipeline and initialize new pipeline */
void usePipeline(Renderer3DPipeline* pipeline);
void usePipeline(Renderer3DPipeline& pipeline);
/** Called by engine */
void init(RendererCore* core);
/** Called by engine */
void onFrameEnd();
private:
Renderer3DPipeline* currentPipeline;
void onDestroy(Renderer3DPipeline* pipeline);
+2 -2
View File
@@ -22,8 +22,8 @@ class RendererSettings {
height(448.0F),
interlacedHeightF(height / 2),
near(0.1F),
far(4096.0F),
projectionScale(4096.0F),
far(8192.0F),
projectionScale(8192.0F),
aspectRatio(width / height),
interlacedHeightUI(static_cast<unsigned int>(interlacedHeightF)) {}
~RendererSettings();