MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRenderHelpers.h
Go to the documentation of this file.
1#pragma once
2#include "exports.h"
3#include "MRMesh/MRMeshFwd.h"
4#include "MRMesh/MRBuffer.h"
5#include "MRMesh/MRVector2.h"
6
7namespace MR
8{
11
12
14MRVIEWER_API Vector2i calcTextureRes( int bufferSize, int maxTextWidth );
15
17template <typename T>
19{
20public:
21 RenderBufferRef() = default;
22
23 RenderBufferRef( T* data, std::size_t glSize, bool dirty )
24 : data_( data )
25 , glSize_( glSize )
26 , dirty_( dirty )
27 {
28 if ( data_ == nullptr )
29 assert( !dirty_ );
30 }
31
33 T& operator []( std::size_t i ) const noexcept
34 {
35 assert( dirty_ );
36 return data_[i];
37 }
39 T* data() const noexcept
40 {
41 return data_;
42 }
44 [[nodiscard]] std::size_t size() const noexcept
45 {
46 return dirty_ ? glSize_ : 0;
47 }
49 [[nodiscard]] std::size_t glSize() const noexcept
50 {
51 return glSize_;
52 }
54 [[nodiscard]] bool dirty() const noexcept
55 {
56 return dirty_;
57 }
58
59private:
60 T* data_{ nullptr };
61 std::size_t glSize_{ 0 };
62 bool dirty_{ false };
63};
64
66class MRVIEWER_CLASS RenderObjectBuffer
67{
68public:
69 template <typename T>
70 RenderBufferRef<T> prepareBuffer( std::size_t glSize, bool dirty = true )
71 {
72 if ( dirty )
73 {
74 auto memSize = sizeof( T ) * glSize;
75 if ( buffer_.size() < memSize )
76 buffer_.resize( memSize );
77 }
78 return { reinterpret_cast<T*>( buffer_.data() ), glSize, dirty };
79 }
80
81 size_t heapBytes() const { return buffer_.heapBytes(); }
82
83private:
84 Buffer<std::byte> buffer_;
85};
86
87}
std::vector<V>-like container that is 1) resized without initialization of its elements,...
Definition MRBuffer.h:58
provides access to shared buffer with type casting
Definition MRRenderHelpers.h:19
provides shared buffer for loading different types of data to GL memory
Definition MRRenderHelpers.h:67
std::size_t size() const noexcept
returns actual buffer size
Definition MRRenderHelpers.h:44
T * data() const noexcept
returns pointer to buffer data
Definition MRRenderHelpers.h:39
MRVIEWER_API Vector2i calcTextureRes(int bufferSize, int maxTextWidth)
calc texture resolution, to fit MAX_TEXTURE_SIZE, and have minimal empty pixels
RenderBufferRef()=default
RenderBufferRef(T *data, std::size_t glSize, bool dirty)
Definition MRRenderHelpers.h:23
size_t heapBytes() const
Definition MRRenderHelpers.h:81
std::size_t glSize() const noexcept
returns number of elements that are about to be loaded or already loaded to GL memory
Definition MRRenderHelpers.h:49
RenderBufferRef< T > prepareBuffer(std::size_t glSize, bool dirty=true)
Definition MRRenderHelpers.h:70
bool dirty() const noexcept
returns true if associated data were updated
Definition MRRenderHelpers.h:54
T & operator[](std::size_t i) const noexcept
returns reference to i-th element
Definition MRRenderHelpers.h:33
only for bindings generation
Definition MRCameraOrientationPlugin.h:8