2022-02-10 23:07:11 +01:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
* Copyright 2016 Blender Foundation. */
|
2016-11-16 17:01:19 +01:00
|
|
|
|
2019-02-17 22:08:12 +01:00
|
|
|
/** \file
|
|
|
|
* \ingroup draw
|
2017-02-07 11:20:15 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2020-05-08 18:16:39 +02:00
|
|
|
#include "BLI_sys_types.h" /* for bool */
|
|
|
|
|
|
|
|
#include "DNA_object_enums.h"
|
|
|
|
|
2019-11-29 11:42:18 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2017-04-25 20:39:25 +02:00
|
|
|
struct ARegion;
|
2021-10-05 09:36:11 +02:00
|
|
|
struct DRWData;
|
2018-01-09 14:09:14 +01:00
|
|
|
struct DRWInstanceDataList;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct Depsgraph;
|
2017-03-08 20:00:09 +01:00
|
|
|
struct DrawEngineType;
|
Materials: add custom object properties as uniform attributes.
This patch allows the user to type a property name into the
Attribute node, which will then output the value of the property
for each individual object, allowing to e.g. customize shaders
by object without duplicating the shader.
In order to make supporting this easier for Eevee, it is necessary
to explicitly choose whether the attribute is varying or uniform
via a dropdown option of the Attribute node. The dropdown also
allows choosing whether instancing should be taken into account.
The Cycles design treats all attributes as one common namespace,
so the Blender interface converts the enum to a name prefix that
can't be entered using keyboard.
In Eevee, the attributes are provided to the shader via a UBO indexed
with resource_id, similar to the existing Object Info data. Unlike it,
however, it is necessary to maintain a separate buffer for every
requested combination of attributes.
This is done using a hash table with the attribute set as the key,
as it is expected that technically different but similar materials
may use the same set of attributes. In addition, in order to minimize
wasted memory, a sparse UBO pool is implemented, so that chunks that
don't contain any data don't have to be allocated.
The back-end Cycles code is already refactored and committed by Brecht.
Differential Revision: https://developer.blender.org/D2057
2020-08-05 18:14:40 +02:00
|
|
|
struct GHash;
|
2018-03-05 00:54:31 +01:00
|
|
|
struct GPUMaterial;
|
2017-05-02 18:50:29 +02:00
|
|
|
struct GPUOffScreen;
|
2022-06-08 21:30:01 +02:00
|
|
|
struct GPUVertFormat;
|
|
|
|
struct CustomDataLayer;
|
|
|
|
struct CustomData;
|
2018-01-05 10:18:44 +01:00
|
|
|
struct GPUViewport;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct ID;
|
|
|
|
struct Main;
|
|
|
|
struct Object;
|
2020-07-20 13:56:29 +02:00
|
|
|
struct Render;
|
2018-01-29 14:56:16 +01:00
|
|
|
struct RenderEngine;
|
2017-10-16 21:15:03 +02:00
|
|
|
struct RenderEngineType;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct Scene;
|
|
|
|
struct View3D;
|
|
|
|
struct ViewLayer;
|
|
|
|
struct bContext;
|
|
|
|
struct rcti;
|
2017-04-25 20:39:25 +02:00
|
|
|
|
2017-03-08 20:00:09 +01:00
|
|
|
void DRW_engines_register(void);
|
2022-03-18 19:03:48 +01:00
|
|
|
void DRW_engines_register_experimental(void);
|
2017-02-07 11:20:15 +01:00
|
|
|
void DRW_engines_free(void);
|
|
|
|
|
2018-01-29 14:56:16 +01:00
|
|
|
bool DRW_engine_render_support(struct DrawEngineType *draw_engine_type);
|
2017-03-08 20:00:09 +01:00
|
|
|
void DRW_engine_register(struct DrawEngineType *draw_engine_type);
|
|
|
|
|
2017-11-28 16:42:58 +01:00
|
|
|
typedef struct DRWUpdateContext {
|
|
|
|
struct Main *bmain;
|
2018-01-16 15:38:44 +01:00
|
|
|
struct Depsgraph *depsgraph;
|
2017-11-28 16:42:58 +01:00
|
|
|
struct Scene *scene;
|
|
|
|
struct ViewLayer *view_layer;
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region;
|
2017-11-28 16:42:58 +01:00
|
|
|
struct View3D *v3d;
|
|
|
|
struct RenderEngineType *engine_type;
|
|
|
|
} DRWUpdateContext;
|
|
|
|
void DRW_notify_view_update(const DRWUpdateContext *update_ctx);
|
2017-09-25 20:07:02 +02:00
|
|
|
|
2018-03-01 06:31:36 +01:00
|
|
|
typedef enum eDRWSelectStage {
|
|
|
|
DRW_SELECT_PASS_PRE = 1,
|
|
|
|
DRW_SELECT_PASS_POST,
|
|
|
|
} eDRWSelectStage;
|
|
|
|
typedef bool (*DRW_SelectPassFn)(eDRWSelectStage stage, void *user_data);
|
2018-06-19 16:41:18 +02:00
|
|
|
typedef bool (*DRW_ObjectFilterFn)(struct Object *ob, void *user_data);
|
2018-03-01 06:31:36 +01:00
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Everything starts here.
|
|
|
|
* This function takes care of calling all cache and rendering functions
|
|
|
|
* for each relevant engine / mode engine.
|
|
|
|
*/
|
2017-03-08 20:00:09 +01:00
|
|
|
void DRW_draw_view(const struct bContext *C);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Draw render engine info.
|
|
|
|
*/
|
2020-05-01 19:29:25 +02:00
|
|
|
void DRW_draw_region_engine_info(int xoffset, int *yoffset, int line_height);
|
2017-05-02 16:45:10 +02:00
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Used for both regular and off-screen drawing.
|
|
|
|
* Need to reset DST before calling this function
|
|
|
|
*/
|
2017-06-06 16:19:07 +02:00
|
|
|
void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph,
|
2017-11-28 15:06:32 +01:00
|
|
|
struct RenderEngineType *engine_type,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2018-04-05 18:20:27 +02:00
|
|
|
struct View3D *v3d,
|
2018-04-27 10:22:37 +02:00
|
|
|
struct GPUViewport *viewport,
|
2017-06-06 16:19:07 +02:00
|
|
|
const struct bContext *evil_C);
|
2018-01-16 15:58:39 +01:00
|
|
|
void DRW_draw_render_loop(struct Depsgraph *depsgraph,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2018-04-27 10:22:37 +02:00
|
|
|
struct View3D *v3d,
|
|
|
|
struct GPUViewport *viewport);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* \param viewport: can be NULL, in this case we create one.
|
|
|
|
*/
|
2017-05-02 18:50:29 +02:00
|
|
|
void DRW_draw_render_loop_offscreen(struct Depsgraph *depsgraph,
|
2017-11-28 15:06:32 +01:00
|
|
|
struct RenderEngineType *engine_type,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2018-04-05 18:20:27 +02:00
|
|
|
struct View3D *v3d,
|
2022-01-07 01:38:08 +01:00
|
|
|
bool is_image_render,
|
|
|
|
bool draw_background,
|
|
|
|
bool do_color_management,
|
2018-01-05 10:18:44 +01:00
|
|
|
struct GPUOffScreen *ofs,
|
|
|
|
struct GPUViewport *viewport);
|
2020-09-11 07:59:48 +02:00
|
|
|
void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph,
|
|
|
|
struct ARegion *region,
|
|
|
|
struct GPUViewport *viewport,
|
|
|
|
const struct bContext *evil_C);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* object mode select-loop, see: #ED_view3d_draw_select_loop (legacy drawing).
|
|
|
|
*/
|
2018-01-16 15:58:39 +01:00
|
|
|
void DRW_draw_select_loop(struct Depsgraph *depsgraph,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2018-04-05 18:20:27 +02:00
|
|
|
struct View3D *v3d,
|
2018-09-04 17:14:46 +02:00
|
|
|
bool use_obedit_skip,
|
|
|
|
bool draw_surface,
|
|
|
|
bool use_nearest,
|
2022-01-07 01:38:08 +01:00
|
|
|
bool do_material_sub_selection,
|
2018-09-04 17:14:46 +02:00
|
|
|
const struct rcti *rect,
|
2018-06-19 16:41:18 +02:00
|
|
|
DRW_SelectPassFn select_pass_fn,
|
|
|
|
void *select_pass_user_data,
|
|
|
|
DRW_ObjectFilterFn object_filter_fn,
|
|
|
|
void *object_filter_user_data);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* object mode select-loop, see: #ED_view3d_draw_depth_loop (legacy drawing).
|
|
|
|
*/
|
2018-01-16 15:58:39 +01:00
|
|
|
void DRW_draw_depth_loop(struct Depsgraph *depsgraph,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2019-03-26 16:19:00 +01:00
|
|
|
struct View3D *v3d,
|
2021-03-30 21:23:58 +02:00
|
|
|
struct GPUViewport *viewport);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Converted from #ED_view3d_draw_depth_gpencil (legacy drawing).
|
|
|
|
*/
|
2019-03-27 14:52:13 +01:00
|
|
|
void DRW_draw_depth_loop_gpencil(struct Depsgraph *depsgraph,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2019-03-27 14:52:13 +01:00
|
|
|
struct View3D *v3d,
|
|
|
|
struct GPUViewport *viewport);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Clears the Depth Buffer and draws only the specified object.
|
|
|
|
*/
|
2020-04-27 11:37:20 +02:00
|
|
|
void DRW_draw_depth_object(struct Scene *scene,
|
|
|
|
struct ARegion *region,
|
2019-12-10 15:18:16 +01:00
|
|
|
struct View3D *v3d,
|
2019-04-19 16:49:17 +02:00
|
|
|
struct GPUViewport *viewport,
|
|
|
|
struct Object *object);
|
2019-07-30 11:46:59 +02:00
|
|
|
void DRW_draw_select_id(struct Depsgraph *depsgraph,
|
2020-03-06 16:56:42 +01:00
|
|
|
struct ARegion *region,
|
2019-07-30 11:46:59 +02:00
|
|
|
struct View3D *v3d,
|
2019-08-15 15:31:54 +02:00
|
|
|
const struct rcti *rect);
|
2019-03-15 20:02:55 +01:00
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/* Grease pencil render. */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Helper to check if exit object type to render.
|
|
|
|
*/
|
2018-11-09 16:30:44 +01:00
|
|
|
bool DRW_render_check_grease_pencil(struct Depsgraph *depsgraph);
|
2018-07-31 10:22:19 +02:00
|
|
|
void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph);
|
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* This is here because #GPUViewport needs it.
|
|
|
|
*/
|
2018-01-09 14:09:14 +01:00
|
|
|
struct DRWInstanceDataList *DRW_instance_data_list_create(void);
|
|
|
|
void DRW_instance_data_list_free(struct DRWInstanceDataList *idatalist);
|
Materials: add custom object properties as uniform attributes.
This patch allows the user to type a property name into the
Attribute node, which will then output the value of the property
for each individual object, allowing to e.g. customize shaders
by object without duplicating the shader.
In order to make supporting this easier for Eevee, it is necessary
to explicitly choose whether the attribute is varying or uniform
via a dropdown option of the Attribute node. The dropdown also
allows choosing whether instancing should be taken into account.
The Cycles design treats all attributes as one common namespace,
so the Blender interface converts the enum to a name prefix that
can't be entered using keyboard.
In Eevee, the attributes are provided to the shader via a UBO indexed
with resource_id, similar to the existing Object Info data. Unlike it,
however, it is necessary to maintain a separate buffer for every
requested combination of attributes.
This is done using a hash table with the attribute set as the key,
as it is expected that technically different but similar materials
may use the same set of attributes. In addition, in order to minimize
wasted memory, a sparse UBO pool is implemented, so that chunks that
don't contain any data don't have to be allocated.
The back-end Cycles code is already refactored and committed by Brecht.
Differential Revision: https://developer.blender.org/D2057
2020-08-05 18:14:40 +02:00
|
|
|
void DRW_uniform_attrs_pool_free(struct GHash *table);
|
2017-02-07 11:20:15 +01:00
|
|
|
|
2020-07-20 13:56:29 +02:00
|
|
|
void DRW_render_context_enable(struct Render *render);
|
|
|
|
void DRW_render_context_disable(struct Render *render);
|
|
|
|
|
2018-02-26 19:41:17 +01:00
|
|
|
void DRW_opengl_context_create(void);
|
|
|
|
void DRW_opengl_context_destroy(void);
|
|
|
|
void DRW_opengl_context_enable(void);
|
|
|
|
void DRW_opengl_context_disable(void);
|
|
|
|
|
VR: Initial Virtual Reality support - Milestone 1, Scene Inspection
NOTE: While most of the milestone 1 goals are there, a few smaller features and
improvements are still to be done.
Big picture of this milestone: Initial, OpenXR-based virtual reality support
for users and foundation for advanced use cases.
Maniphest Task: https://developer.blender.org/T71347
The tasks contains more information about this milestone.
To be clear: This is not a feature rich VR implementation, it's focused on the
initial scene inspection use case. We intentionally focused on that, further
features like controller support are part of the next milestone.
- How to use?
Instructions on how to use this are here:
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/How_to_Test
These will be updated and moved to a more official place (likely the manual) soon.
Currently Windows Mixed Reality and Oculus devices are usable. Valve/HTC
headsets don't support the OpenXR standard yet and hence, do not work with this
implementation.
---------------
This is the C-side implementation of the features added for initial VR
support as per milestone 1. A "VR Scene Inspection" Add-on will be
committed separately, to expose the VR functionality in the UI. It also
adds some further features for milestone 1, namely a landmarking system
(stored view locations in the VR space)
Main additions/features:
* Support for rendering viewports to an HMD, with good performance.
* Option to sync the VR view perspective with a fully interactive,
regular 3D View (VR-Mirror).
* Option to disable positional tracking. Keeps the current position (calculated
based on the VR eye center pose) when enabled while a VR session is running.
* Some regular viewport settings for the VR view
* RNA/Python-API to query and set VR session state information.
* WM-XR: Layer tying Ghost-XR to the Blender specific APIs/data
* wmSurface API: drawable, non-window container (manages Ghost-OpenGL and GPU
context)
* DNA/RNA for management of VR session settings
* `--debug-xr` and `--debug-xr-time` commandline options
* Utility batch & config file for using the Oculus runtime on Windows.
* Most VR data is runtime only. The exception is user settings which are saved
to files (`XrSessionSettings`).
* VR support can be disabled through the `WITH_XR_OPENXR` compiler flag.
For architecture and code documentation, see
https://wiki.blender.org/wiki/Source/Interface/XR.
---------------
A few thank you's:
* A huge shoutout to Ray Molenkamp for his help during the project - it would
have not been that successful without him!
* Sebastian Koenig and Simeon Conzendorf for testing and feedback!
* The reviewers, especially Brecht Van Lommel!
* Dalai Felinto for pushing and managing me to get this done ;)
* The OpenXR working group for providing an open standard. I think we're the
first bigger application to adopt OpenXR. Congratulations to them and
ourselves :)
This project started as a Google Summer of Code 2019 project - "Core Support of
Virtual Reality Headsets through OpenXR" (see
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/).
Some further information, including ideas for further improvements can be found
in the final GSoC report:
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/Final_Report
Differential Revisions: D6193, D7098
Reviewed by: Brecht Van Lommel, Jeroen Bakker
2020-03-17 20:20:55 +01:00
|
|
|
#ifdef WITH_XR_OPENXR
|
|
|
|
/* XXX see comment on DRW_xr_opengl_context_get() */
|
|
|
|
void *DRW_xr_opengl_context_get(void);
|
|
|
|
void *DRW_xr_gpu_context_get(void);
|
|
|
|
void DRW_xr_drawing_begin(void);
|
|
|
|
void DRW_xr_drawing_end(void);
|
|
|
|
#endif
|
|
|
|
|
2019-04-19 02:22:22 +02:00
|
|
|
/* For garbage collection */
|
|
|
|
void DRW_cache_free_old_batches(struct Main *bmain);
|
OpenSubDiv: add support for an OpenGL evaluator
This evaluator is used in order to evaluate subdivision at render time, allowing for
faster renders of meshes with a subdivision surface modifier placed at the last
position in the modifier list.
When evaluating the subsurf modifier, we detect whether we can delegate evaluation
to the draw code. If so, the subdivision is first evaluated on the GPU using our own
custom evaluator (only the coarse data needs to be initially sent to the GPU), then,
buffers for the final `MeshBufferCache` are filled on the GPU using a set of
compute shaders. However, some buffers are still filled on the CPU side, if doing so
on the GPU is impractical (e.g. the line adjacency buffer used for x-ray, whose
logic is hardly GPU compatible).
This is done at the mesh buffer extraction level so that the result can be readily used
in the various OpenGL engines, without having to write custom geometry or tesselation
shaders.
We use our own subdivision evaluation shaders, instead of OpenSubDiv's vanilla one, in
order to control the data layout, and interpolation. For example, we store vertex colors
as compressed 16-bit integers, while OpenSubDiv's default evaluator only work for float
types.
In order to still access the modified geometry on the CPU side, for use in modifiers
or transform operators, a dedicated wrapper type is added `MESH_WRAPPER_TYPE_SUBD`.
Subdivision will be lazily evaluated via `BKE_object_get_evaluated_mesh` which will
create such a wrapper if possible. If the final subdivision surface is not needed on
the CPU side, `BKE_object_get_evaluated_mesh_no_subsurf` should be used.
Enabling or disabling GPU subdivision can be done through the user preferences (under
Viewport -> Subdivision).
See patch description for benchmarks.
Reviewed By: campbellbarton, jbakker, fclem, brecht, #eevee_viewport
Differential Revision: https://developer.blender.org/D12406
2021-12-27 16:34:47 +01:00
|
|
|
void DRW_cache_free_old_subdiv(void);
|
|
|
|
|
|
|
|
/* For the OpenGL evaluators and garbage collected subdivision data. */
|
|
|
|
void DRW_subdiv_free(void);
|
2019-04-19 02:22:22 +02:00
|
|
|
|
2018-07-19 15:48:13 +02:00
|
|
|
/* Never use this. Only for closing blender. */
|
|
|
|
void DRW_opengl_context_enable_ex(bool restore);
|
|
|
|
void DRW_opengl_context_disable_ex(bool restore);
|
|
|
|
|
2018-07-10 14:40:28 +02:00
|
|
|
void DRW_opengl_render_context_enable(void *re_gl_context);
|
|
|
|
void DRW_opengl_render_context_disable(void *re_gl_context);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Needs to be called AFTER #DRW_opengl_render_context_enable().
|
|
|
|
*/
|
2019-08-16 17:17:30 +02:00
|
|
|
void DRW_gpu_render_context_enable(void *re_gpu_context);
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Needs to be called BEFORE #DRW_opengl_render_context_disable().
|
|
|
|
*/
|
2019-08-16 17:17:30 +02:00
|
|
|
void DRW_gpu_render_context_disable(void *re_gpu_context);
|
2018-07-10 14:40:28 +02:00
|
|
|
|
2018-03-05 00:54:31 +01:00
|
|
|
void DRW_deferred_shader_remove(struct GPUMaterial *mat);
|
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* Get DrawData from the given ID-block. In order for this to work, we assume that
|
|
|
|
* the DrawData pointer is stored in the struct in the same fashion as in #IdDdtTemplate.
|
|
|
|
*/
|
2018-07-10 14:14:55 +02:00
|
|
|
struct DrawDataList *DRW_drawdatalist_from_id(struct ID *id);
|
|
|
|
void DRW_drawdata_free(struct ID *id);
|
|
|
|
|
2021-10-05 09:36:11 +02:00
|
|
|
struct DRWData *DRW_viewport_data_create(void);
|
|
|
|
void DRW_viewport_data_free(struct DRWData *drw_data);
|
|
|
|
|
Cycles: merge of cycles-x branch, a major update to the renderer
This includes much improved GPU rendering performance, viewport interactivity,
new shadow catcher, revamped sampling settings, subsurface scattering anisotropy,
new GPU volume sampling, improved PMJ sampling pattern, and more.
Some features have also been removed or changed, breaking backwards compatibility.
Including the removal of the OpenCL backend, for which alternatives are under
development.
Release notes and code docs:
https://wiki.blender.org/wiki/Reference/Release_Notes/3.0/Cycles
https://wiki.blender.org/wiki/Source/Render/Cycles
Credits:
* Sergey Sharybin
* Brecht Van Lommel
* Patrick Mours (OptiX backend)
* Christophe Hery (subsurface scattering anisotropy)
* William Leeson (PMJ sampling pattern)
* Alaska (various fixes and tweaks)
* Thomas Dinges (various fixes)
For the full commit history, see the cycles-x branch. This squashes together
all the changes since intermediate changes would often fail building or tests.
Ref T87839, T87837, T87836
Fixes T90734, T89353, T80267, T80267, T77185, T69800
2021-09-20 17:59:20 +02:00
|
|
|
bool DRW_opengl_context_release(void);
|
2021-09-21 15:56:05 +02:00
|
|
|
void DRW_opengl_context_activate(bool drw_state);
|
Cycles: merge of cycles-x branch, a major update to the renderer
This includes much improved GPU rendering performance, viewport interactivity,
new shadow catcher, revamped sampling settings, subsurface scattering anisotropy,
new GPU volume sampling, improved PMJ sampling pattern, and more.
Some features have also been removed or changed, breaking backwards compatibility.
Including the removal of the OpenCL backend, for which alternatives are under
development.
Release notes and code docs:
https://wiki.blender.org/wiki/Reference/Release_Notes/3.0/Cycles
https://wiki.blender.org/wiki/Source/Render/Cycles
Credits:
* Sergey Sharybin
* Brecht Van Lommel
* Patrick Mours (OptiX backend)
* Christophe Hery (subsurface scattering anisotropy)
* William Leeson (PMJ sampling pattern)
* Alaska (various fixes and tweaks)
* Thomas Dinges (various fixes)
For the full commit history, see the cycles-x branch. This squashes together
all the changes since intermediate changes would often fail building or tests.
Ref T87839, T87837, T87836
Fixes T90734, T89353, T80267, T80267, T77185, T69800
2021-09-20 17:59:20 +02:00
|
|
|
|
2021-12-08 10:29:39 +01:00
|
|
|
/**
|
|
|
|
* We may want to move this into a more general location.
|
|
|
|
* \note This doesn't require the draw context to be in use.
|
|
|
|
*/
|
2021-10-07 03:32:04 +02:00
|
|
|
void DRW_draw_cursor_2d_ex(const struct ARegion *region, const float cursor[2]);
|
|
|
|
|
2022-06-08 21:30:01 +02:00
|
|
|
void DRW_cdlayer_attr_aliases_add(struct GPUVertFormat *format,
|
2022-06-09 01:48:37 +02:00
|
|
|
const char *base_name,
|
2022-06-08 21:30:01 +02:00
|
|
|
const struct CustomData *data,
|
|
|
|
const struct CustomDataLayer *cl,
|
|
|
|
bool is_active_render,
|
|
|
|
bool is_active_layer);
|
2019-11-29 11:42:18 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|