41 static std::atomic<uint32_t> global_sync_counter_;
44 uint32_t sync_counter_ = 0;
70 View(
const char *
name,
int view_len = 1,
bool procedural =
false)
96 return data_[view_id].winmat[3][3] == 0.0f;
110 return -
data_[view_id].winmat[3][2] / (
data_[view_id].winmat[2][2] + 1.0f);
119 return -
data_[view_id].winmat[3][2] / (
data_[view_id].winmat[2][2] - 1.0f);
127 return data_[view_id].viewinv.location();
133 return data_[view_id].viewinv.z_axis();
139 return data_[view_id].viewmat;
145 return data_[view_id].viewinv;
151 return data_[view_id].winmat;
157 return data_[view_id].wininv;
164 return data_[view_id].winmat *
data_[view_id].viewmat;
199 float view_dist =
dist;
214 float view_dist =
dist;
251 BLI_assert_msg(sync_counter_ != 0,
"View should be synced at least once before use");
252 return sync_counter_;
#define BLI_assert_msg(a, msg)
MINLINE float max_ff(float a, float b)
MINLINE uint divide_ceil_u(uint a, uint b)
#define UNUSED_VARS_NDEBUG(...)
float GPU_polygon_offset_calc(const float(*winmat)[4], float viewdist, float dist)
unsigned long long int uint64_t
const float3 & location(int view_id=0) const
UniformArrayBuffer< ViewCullingData, DRW_VIEW_MAX > culling_
void visibility_test(bool enable)
static void default_set(const float4x4 &view_mat, const float4x4 &win_mat)
View(const char *name, int view_len=1, bool procedural=false)
VisibilityBuf visibility_buf_
bool is_inverted(int view_id=0) const
bool is_persp(int view_id=0) const
const float4x4 & winmat(int view_id=0) const
const float4x4 persmat(int view_id=0) const
const float4x4 & viewmat(int view_id=0) const
float near_clip(int view_id=0) const
bool has_computed_visibility() const
void update_viewport_size()
void compute_procedural_bounds()
UniformArrayBuffer< ViewMatrices, DRW_VIEW_MAX > data_freeze_
virtual void compute_visibility(ObjectBoundsBuf &bounds, ObjectInfosBuf &infos, uint resource_len, bool debug_freeze)
UniformArrayBuffer< ViewMatrices, DRW_VIEW_MAX > data_
UniformArrayBuffer< ViewCullingData, DRW_VIEW_MAX > culling_freeze_
static View & default_get()
UniformArrayBuffer< ViewMatrices, DRW_VIEW_MAX > & matrices_ubo_get()
const float4x4 & viewinv(int view_id=0) const
virtual VisibilityBuf & get_visibility_buffer()
uint64_t manager_fingerprint_
void frustum_culling_sphere_calc(int view_id)
const float4x4 & wininv(int view_id=0) const
std::array< float3, 8 > frustum_corners_get(int view_id=0)
const float3 & forward(int view_id=0) const
int visibility_word_per_draw() const
std::array< float4, 6 > frustum_planes_get(int view_id=0)
void frustum_boundbox_calc(int view_id)
float far_clip(int view_id=0) const
uint64_t fingerprint_get() const
void sync(const float4x4 &view_mat, const float4x4 &win_mat, int view_id=0)
void frustum_culling_planes_calc(int view_id)
StorageArrayBuffer< ObjectBounds, 128 > ObjectBoundsBuf
StorageArrayBuffer< ObjectInfos, 128 > ObjectInfosBuf
StorageArrayBuffer< uint, 4, true > VisibilityBuf
MatBase< float, 4, 4 > float4x4
VecBase< float, 3 > float3
OffsetData(const RegionView3D &rv3d)
float polygon_offset_factor(const float4x4 &winmat)
float4x4 winmat_polygon_offset(const float4x4 &winmat, float offset)