Spaces:
Running
on
Zero
Running
on
Zero
File size: 3,605 Bytes
476e0f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
/*
* Copyright (C) 2023, Inria
* GRAPHDECO research group, https://team.inria.fr/graphdeco
* All rights reserved.
*
* This software is free for non-commercial, research and evaluation use
* under the terms of the LICENSE.md file.
*
* For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr
*/
#pragma once
# include "Config.hpp"
# include <core/renderer/RenderMaskHolder.hpp>
# include <core/scene/BasicIBRScene.hpp>
# include <core/system/SimpleTimer.hpp>
# include <core/system/Config.hpp>
# include <core/graphics/Mesh.hpp>
# include <core/view/ViewBase.hpp>
# include <core/renderer/CopyRenderer.hpp>
# include <core/renderer/PointBasedRenderer.hpp>
# include <memory>
# include <core/graphics/Texture.hpp>
#include <cuda_runtime.h>
#include <cuda_gl_interop.h>
#include <functional>
# include "GaussianSurfaceRenderer.hpp"
namespace CudaRasterizer
{
class Rasterizer;
}
namespace sibr {
class BufferCopyRenderer;
class BufferCopyRenderer2;
/**
* \class RemotePointView
* \brief Wrap a ULR renderer with additional parameters and information.
*/
class SIBR_EXP_ULR_EXPORT GaussianView : public sibr::ViewBase
{
SIBR_CLASS_PTR(GaussianView);
public:
/**
* Constructor
* \param ibrScene The scene to use for rendering.
* \param render_w rendering width
* \param render_h rendering height
*/
GaussianView(const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h, const char* file, bool* message_read, int sh_degree, bool white_bg = false, bool useInterop = true, int device = 0);
/** Replace the current scene.
*\param newScene the new scene to render */
void setScene(const sibr::BasicIBRScene::Ptr & newScene);
/**
* Perform rendering. Called by the view manager or rendering mode.
* \param dst The destination rendertarget.
* \param eye The novel viewpoint.
*/
void onRenderIBR(sibr::IRenderTarget& dst, const sibr::Camera& eye) override;
/**
* Update inputs (do nothing).
* \param input The inputs state.
*/
void onUpdate(Input& input) override;
/**
* Update the GUI.
*/
void onGUI() override;
/** \return a reference to the scene */
const std::shared_ptr<sibr::BasicIBRScene> & getScene() const { return _scene; }
virtual ~GaussianView() override;
bool* _dontshow;
protected:
std::string currMode = "Splats";
bool _cropping = false;
sibr::Vector3f _boxmin, _boxmax, _scenemin, _scenemax;
char _buff[512] = "cropped.ply";
bool _fastCulling = true;
int _device = 0;
int _sh_degree = 3;
int count;
float* pos_cuda;
float* rot_cuda;
float* scale_cuda;
float* opacity_cuda;
float* shs_cuda;
int* rect_cuda;
GLuint imageBuffer;
cudaGraphicsResource_t imageBufferCuda;
size_t allocdGeom = 0, allocdBinning = 0, allocdImg = 0;
void* geomPtr = nullptr, * binningPtr = nullptr, * imgPtr = nullptr;
std::function<char* (size_t N)> geomBufferFunc, binningBufferFunc, imgBufferFunc;
float* view_cuda;
float* proj_cuda;
float* cam_pos_cuda;
float* background_cuda;
float _scalingModifier = 1.0f;
GaussianData* gData;
bool _interop_failed = false;
std::vector<char> fallback_bytes;
float* fallbackBufferCuda = nullptr;
bool accepted = false;
std::shared_ptr<sibr::BasicIBRScene> _scene; ///< The current scene.
PointBasedRenderer::Ptr _pointbasedrenderer;
BufferCopyRenderer* _copyRenderer;
GaussianSurfaceRenderer* _gaussianRenderer;
};
} /*namespace sibr*/
|