Some functions used at least once per object/instance when drawing are so trivial that function call overhead becomes significant. Allowing these functions to be inlined can remove that overhead and also give the compiler more information it can use for optimization. In the Erindale Flower Shop file, this change gives me a 10% improvement in playback FPS, from 8.77 to 9.65. Pull Request: https://projects.blender.org/blender/blender/pulls/140402
102 lines
2.6 KiB
C++
102 lines
2.6 KiB
C++
/* SPDX-FileCopyrightText: 2016 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup draw
|
|
*/
|
|
|
|
/* Private functions / structs of the draw manager */
|
|
|
|
#pragma once
|
|
|
|
#include "DRW_engine.hh"
|
|
#include "DRW_render.hh"
|
|
|
|
#include "BLI_task.h"
|
|
#include "BLI_threads.h"
|
|
#include "BLI_vector_set.hh"
|
|
|
|
#include "GPU_batch.hh"
|
|
#include "GPU_context.hh"
|
|
#include "GPU_framebuffer.hh"
|
|
#include "GPU_viewport.hh"
|
|
|
|
struct DRWDebugModule;
|
|
struct DRWUniformChunk;
|
|
struct DRWViewData;
|
|
struct DRWTextStore;
|
|
struct DupliObject;
|
|
struct Object;
|
|
struct Mesh;
|
|
namespace blender::draw {
|
|
struct CurvesModule;
|
|
struct VolumeModule;
|
|
struct PointCloudModule;
|
|
struct DRW_MeshCDMask;
|
|
class CurveRefinePass;
|
|
class View;
|
|
} // namespace blender::draw
|
|
struct GPUMaterial;
|
|
struct GSet;
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Memory Pools
|
|
* \{ */
|
|
|
|
/** Contains memory pools information. */
|
|
struct DRWData {
|
|
/** Instance data. */
|
|
DRWInstanceDataList *idatalist;
|
|
/** List of smoke textures to free after drawing. */
|
|
ListBase smoke_textures;
|
|
/** Per stereo view data. Contains engine data and default frame-buffers. */
|
|
DRWViewData *view_data[2];
|
|
/** Module storage. */
|
|
blender::draw::CurvesModule *curves_module;
|
|
blender::draw::VolumeModule *volume_module;
|
|
blender::draw::PointCloudModule *pointcloud_module;
|
|
/** Default view that feeds every engine. */
|
|
blender::draw::View *default_view;
|
|
|
|
/* Ensure modules are created. */
|
|
void modules_init();
|
|
/* Callbacks before each sync cycle. */
|
|
void modules_begin_sync();
|
|
/* Callbacks after one draw to clear transient data. */
|
|
void modules_exit();
|
|
};
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Functions
|
|
* \{ */
|
|
|
|
/* Get thread local draw context. */
|
|
inline DRWContext &drw_get()
|
|
{
|
|
return DRWContext::get_active();
|
|
}
|
|
|
|
namespace blender::draw {
|
|
|
|
void drw_batch_cache_validate(Object *ob);
|
|
void drw_batch_cache_generate_requested(Object *ob, TaskGraph &task_graph);
|
|
|
|
/**
|
|
* \warning Only evaluated mesh data is handled by this delayed generation.
|
|
*/
|
|
void drw_batch_cache_generate_requested_delayed(Object *ob);
|
|
void drw_batch_cache_generate_requested_evaluated_mesh_or_curve(Object *ob, TaskGraph &task_graph);
|
|
|
|
void DRW_mesh_get_attributes(const Object &object,
|
|
const Mesh &mesh,
|
|
Span<const GPUMaterial *> materials,
|
|
VectorSet<std::string> *r_attrs,
|
|
DRW_MeshCDMask *r_cd_needed);
|
|
|
|
} // namespace blender::draw
|
|
|
|
/** \} */
|