31 if (
view.is_persp()) {
33 for (
auto &pix : pix_z) {
34 pix = (-winmat[3][2] / -pix) - winmat[2][2];
35 pix =
clamp_f(pix * 0.5f + 0.5f, 0.0f, 1.0f);
40 const float near =
view.near_clip();
41 const float far =
view.far_clip();
42 const float range_inv = 1.0f /
fabsf(far - near);
43 for (
auto &pix : pix_z) {
44 pix = (pix + near) * range_inv;
70 const bool use_separated_pass)
83 if (!pix_z || !pix_col) {
85 "Warning: To render Grease Pencil, enable Combined and Z passes.");
94 const bool do_region = (!use_separated_pass) &&
97 const bool do_clear_z = !pix_z || do_region;
98 const bool do_clear_col = use_separated_pass || (!pix_col) || do_region;
124 if (do_clear_z || do_clear_col) {
128 const float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
154 const char *viewname,
183 for (
int i = 0;
i < pix_num;
i++) {
184 if (ro_buffer_data[
i] == 1.0f) {
185 ro_buffer_data[
i] = 1e10f;
188 ro_buffer_data[
i] = ro_buffer_data[
i] * 2.0f - 1.0f;
189 ro_buffer_data[
i] = winmat[3][2] / (ro_buffer_data[
i] + winmat[2][2]);
197 float range =
fabsf(far - near);
199 for (
int i = 0;
i < pix_num;
i++) {
200 if (ro_buffer_data[
i] == 1.0f) {
201 ro_buffer_data[
i] = 1e10f;
204 ro_buffer_data[
i] = ro_buffer_data[
i] * range - near;
211 const char *viewname,
254 const bool separated_pass)
258 for (
const int sample_i :
IndexRange(sample_count)) {
271 const float weight = 1.0f / (1.0f + sample_i);
General operations, lookup, etc. for blender objects.
MINLINE float clamp_f(float value, float min, float max)
void window_translate_m4(float winmat[4][4], float perspmat[4][4], float x, float y)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ GREASE_PENCIL_AS_SEPARATE_PASS
#define RE_PASSNAME_COMBINED
#define RE_PASSNAME_GREASE_PENCIL
void GPU_framebuffer_read_color(GPUFrameBuffer *fb, int x, int y, int width, int height, int channels, int slot, eGPUDataFormat data_format, void *r_data)
#define GPU_ATTACHMENT_TEXTURE(_texture)
void GPU_framebuffer_read_depth(GPUFrameBuffer *fb, int x, int y, int width, int height, eGPUDataFormat data_format, void *r_data)
#define GPU_ATTACHMENT_NONE
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
void GPU_framebuffer_clear_color(GPUFrameBuffer *fb, const float clear_col[4])
void GPU_framebuffer_clear_depth(GPUFrameBuffer *fb, float clear_depth)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_HOST_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
void GPU_texture_update_sub(GPUTexture *texture, eGPUDataFormat data_format, const void *pixels, int offset_x, int offset_y, int offset_z, int width, int height, int depth)
void GPU_texture_update(GPUTexture *texture, eGPUDataFormat data_format, const void *data)
BMesh const char void * data
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void ensure(GPUAttachment depth=GPU_ATTACHMENT_NONE, GPUAttachment color1=GPU_ATTACHMENT_NONE, GPUAttachment color2=GPU_ATTACHMENT_NONE, GPUAttachment color3=GPU_ATTACHMENT_NONE, GPUAttachment color4=GPU_ATTACHMENT_NONE, GPUAttachment color5=GPU_ATTACHMENT_NONE, GPUAttachment color6=GPU_ATTACHMENT_NONE, GPUAttachment color7=GPU_ATTACHMENT_NONE, GPUAttachment color8=GPU_ATTACHMENT_NONE)
void begin_sync(Object *object_active=nullptr)
bool ensure_2d(eGPUTextureFormat format, int2 extent, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL, const float *data=nullptr, int mip_len=1)
int3 size(int miplvl=0) const
static void default_set(const float4x4 &view_mat, const float4x4 &win_mat)
const float4x4 & winmat(int view_id=0) const
float near_clip(int view_id=0) const
static View & default_get()
float far_clip(int view_id=0) const
const DRWContext * DRW_context_get()
void DRW_render_object_iter(RenderEngine *engine, Depsgraph *depsgraph, std::function< void(blender::draw::ObjectRef &, RenderEngine *, Depsgraph *)> callback)
int DRW_object_visibility_in_active_context(const Object *ob)
blender::draw::Manager * DRW_manager_get()
void RE_GetCameraModelMatrix(const Render *re, const Object *camera, float r_modelmat[4][4])
void RE_GetCameraWindow(Render *re, const Object *camera, float r_winmat[4][4])
Object * RE_GetCamera(Render *re)
void RE_engine_set_error_message(RenderEngine *engine, const char *msg)
void * MEM_dupallocN(const void *vmemh)
static void render_set_view(RenderEngine *engine, const Depsgraph *depsgraph, const float2 aa_offset=float2{0.0f})
static void render_result_separated_pass(float *data, Instance &instance, const rcti *rect)
static void render_result_combined(RenderLayer *rl, const char *viewname, Instance &instance, const rcti *rect)
static void render_frame(RenderEngine *engine, Depsgraph *depsgraph, const DRWContext *draw_ctx, RenderLayer *render_layer, const rcti rect, gpencil::Instance &inst, Manager &manager, const bool separated_pass)
static void remap_depth(const View &view, MutableSpan< float > pix_z)
static void render_init_buffers(const DRWContext *draw_ctx, Instance &inst, RenderEngine *engine, RenderLayer *render_layer, const rcti *rect, const bool use_separated_pass)
static void render_result_z(const DRWContext *draw_ctx, RenderLayer *rl, const char *viewname, Instance &instance, const rcti *rect)
CartesianBasis invert(const CartesianBasis &basis)
MatBase< float, 4, 4 > float4x4
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
void RE_create_render_pass(RenderResult *rr, const char *name, int channels, const char *chan_id, const char *layername, const char *viewname, const bool allocate)
RenderPass * RE_pass_find_by_name(RenderLayer *rl, const char *name, const char *viewname)
const char * RE_GetActiveRenderView(Render *re)
float * RE_RenderLayerGetPass(RenderLayer *rl, const char *name, const char *viewname)
blender::float2 viewport_size_get() const
ImBufFloatBuffer float_buffer
struct SceneGpencil grease_pencil_settings
const c_style_mat & ptr() const
static void render_to_image(RenderEngine *engine, RenderLayer *render_layer, const rcti rect)
void draw(Manager &manager) final
static float2 antialiasing_sample_get(int sample_index, int sample_count)
void object_sync(ObjectRef &ob_ref, Manager &manager) final
void antialiasing_accumulate(Manager &manager, float alpha)