Blender V4.3
gpencil_antialiasing.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2019 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "DRW_render.hh"
10
11#include "gpencil_engine.h"
12
13#include "BLI_smaa_textures.h"
14
16{
17 GPENCIL_PrivateData *pd = vedata->stl->pd;
18 GPENCIL_FramebufferList *fbl = vedata->fbl;
19 GPENCIL_TextureList *txl = vedata->txl;
20 GPENCIL_PassList *psl = vedata->psl;
21 DRWShadingGroup *grp;
22
23 const float *size = DRW_viewport_size_get();
24 const float *sizeinv = DRW_viewport_invert_size_get();
25 const float metrics[4] = {sizeinv[0], sizeinv[1], size[0], size[1]};
26
27 if (pd->simplify_antialias) {
28 /* No AA fallback. */
30
32 grp = DRW_shgroup_create(sh, psl->smaa_resolve_ps);
33 DRW_shgroup_uniform_texture(grp, "blendTex", pd->color_tx);
34 DRW_shgroup_uniform_texture(grp, "colorTex", pd->color_tx);
35 DRW_shgroup_uniform_texture(grp, "revealTex", pd->reveal_tx);
36 DRW_shgroup_uniform_bool_copy(grp, "doAntiAliasing", false);
37 DRW_shgroup_uniform_bool_copy(grp, "onlyAlpha", pd->draw_wireframe);
38 DRW_shgroup_uniform_vec4_copy(grp, "viewportMetrics", metrics);
39
41 return;
42 }
43
45
46 if (txl->smaa_search_tx == nullptr) {
47
49 "smaa_search", SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT, 1, GPU_R8, usage, nullptr);
51
53 "smaa_area", AREATEX_WIDTH, AREATEX_HEIGHT, 1, GPU_RG8, usage, nullptr);
55
58 }
59
60 {
62 size[0], size[1], GPU_RG8, usage, &draw_engine_gpencil_type);
64 size[0], size[1], GPU_RGBA8, usage, &draw_engine_gpencil_type);
65
67 {
68 GPU_ATTACHMENT_NONE,
69 GPU_ATTACHMENT_TEXTURE(pd->smaa_edge_tx),
70 });
71
73 {
74 GPU_ATTACHMENT_NONE,
75 GPU_ATTACHMENT_TEXTURE(pd->smaa_weight_tx),
76 });
77 }
78
79 {
80 /* Stage 1: Edge detection. */
82
84 grp = DRW_shgroup_create(sh, psl->smaa_edge_ps);
85 DRW_shgroup_uniform_texture(grp, "colorTex", pd->color_tx);
86 DRW_shgroup_uniform_texture(grp, "revealTex", pd->reveal_tx);
87 DRW_shgroup_uniform_vec4_copy(grp, "viewportMetrics", metrics);
89 grp, "lumaWeight", pd->scene->grease_pencil_settings.smaa_threshold);
90
91 DRW_shgroup_clear_framebuffer(grp, GPU_COLOR_BIT, 0, 0, 0, 0, 0.0f, 0x0);
93 }
94 {
95 /* Stage 2: Blend Weight/Coord. */
97
99 grp = DRW_shgroup_create(sh, psl->smaa_weight_ps);
100 DRW_shgroup_uniform_texture(grp, "edgesTex", pd->smaa_edge_tx);
101 DRW_shgroup_uniform_texture(grp, "areaTex", txl->smaa_area_tx);
102 DRW_shgroup_uniform_texture(grp, "searchTex", txl->smaa_search_tx);
103 DRW_shgroup_uniform_vec4_copy(grp, "viewportMetrics", metrics);
104
105 DRW_shgroup_clear_framebuffer(grp, GPU_COLOR_BIT, 0, 0, 0, 0, 0.0f, 0x0);
107 }
108 {
109 /* Stage 3: Resolve. */
111
113 grp = DRW_shgroup_create(sh, psl->smaa_resolve_ps);
114 DRW_shgroup_uniform_texture(grp, "blendTex", pd->smaa_weight_tx);
115 DRW_shgroup_uniform_texture(grp, "colorTex", pd->color_tx);
116 DRW_shgroup_uniform_texture(grp, "revealTex", pd->reveal_tx);
117 DRW_shgroup_uniform_bool_copy(grp, "doAntiAliasing", true);
118 DRW_shgroup_uniform_bool_copy(grp, "onlyAlpha", pd->draw_wireframe);
119 DRW_shgroup_uniform_vec4_copy(grp, "viewportMetrics", metrics);
120
122 }
123}
124
126{
127 GPENCIL_FramebufferList *fbl = vedata->fbl;
128 GPENCIL_PrivateData *pd = vedata->stl->pd;
129 GPENCIL_PassList *psl = vedata->psl;
130
131 if (!pd->simplify_antialias) {
134
137 }
138
141}
#define SEARCHTEX_HEIGHT
const unsigned char searchTexBytes[]
#define SEARCHTEX_WIDTH
#define AREATEX_HEIGHT
const unsigned char areaTexBytes[]
#define AREATEX_WIDTH
#define DRW_PASS_CREATE(pass, state)
@ GPU_COLOR_BIT
void GPU_framebuffer_bind(GPUFrameBuffer *framebuffer)
#define GPU_framebuffer_ensure_config(_fb,...)
GPUTexture * GPU_texture_create_2d(const char *name, int width, int height, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
@ GPU_DATA_UBYTE
eGPUTextureUsage
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
void GPU_texture_filter_mode(GPUTexture *texture, bool use_filter)
@ GPU_RG8
@ GPU_R8
void GPU_texture_update(GPUTexture *texture, eGPUDataFormat data_format, const void *data)
struct GPUShader GPUShader
const float * DRW_viewport_invert_size_get()
const float * DRW_viewport_size_get()
DRWShadingGroup * DRW_shgroup_create(GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, const Object *ob, uint tri_count)
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_shgroup_clear_framebuffer(DRWShadingGroup *shgroup, eGPUFrameBufferBits channels, uchar r, uchar g, uchar b, uchar a, float depth, uchar stencil)
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, const bool value)
void DRW_draw_pass(DRWPass *pass)
GPUTexture * DRW_texture_pool_query_2d_ex(int w, int h, eGPUTextureFormat format, eGPUTextureUsage usage, DrawEngineType *engine_type)
@ DRW_STATE_WRITE_COLOR
Definition draw_state.hh:30
@ DRW_STATE_BLEND_CUSTOM
Definition draw_state.hh:63
RAYTRACE_GROUP_SIZE additional_info("eevee_shared", "eevee_gbuffer_data", "eevee_global_ubo", "eevee_sampling_data", "eevee_utility_texture", "eevee_hiz_data", "draw_view") .specialization_constant(Type RAYTRACE_GROUP_SIZE in_sh_0_tx in_sh_2_tx screen_normal_tx GPU_RGBA8
void GPENCIL_antialiasing_draw(GPENCIL_Data *vedata)
void GPENCIL_antialiasing_init(GPENCIL_Data *vedata)
DrawEngineType draw_engine_gpencil_type
struct GPUShader * GPENCIL_shader_antialiasing(int stage)
struct GPENCIL_TextureList * txl
struct GPENCIL_PassList * psl
struct GPENCIL_StorageList * stl
struct GPENCIL_FramebufferList * fbl
struct GPUFrameBuffer * smaa_weight_fb
struct GPUFrameBuffer * smaa_edge_fb
struct DRWPass * smaa_weight_ps
struct DRWPass * smaa_resolve_ps
struct DRWPass * smaa_edge_ps
GPUTexture * smaa_weight_tx
GPUFrameBuffer * scene_fb
struct Scene * scene
GPUTexture * smaa_edge_tx
struct GPENCIL_PrivateData * pd
struct GPUTexture * smaa_area_tx
struct GPUTexture * smaa_search_tx
struct SceneGpencil grease_pencil_settings