GPv3: UI and RNA for layer opacity

Adds the UI for layer opacity in the layer panel.

Currently layer blending rendering is not implemented, so the last layer's opacity will affect all of the layers.

Pull Request: https://projects.blender.org/blender/blender/pulls/110177
This commit is contained in:
casey bianco-davis 2023-07-19 17:34:05 +02:00 committed by Falk David
parent 7f905a0b06
commit 1629eb61a1
6 changed files with 38 additions and 4 deletions

@ -47,6 +47,10 @@ class DATA_PT_grease_pencil_layers(DataButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
ob = context.object
grease_pencil = context.grease_pencil
layer = grease_pencil.layers.active
row = layout.row()
row.template_grease_pencil_layer_tree()
@ -57,6 +61,15 @@ class DATA_PT_grease_pencil_layers(DataButtonsPanel, Panel):
col.operator("grease_pencil.layer_remove", icon='REMOVE', text="")
# Layer main properties
if layer:
layout.use_property_split = True
layout.use_property_decorate = True
col = layout.column(align=True)
col = layout.row(align=True)
col.prop(layer, "opacity", text="Opacity", slider=True)
classes = (
DATA_PT_context_grease_pencil,

@ -504,6 +504,8 @@ Layer::Layer()
this->frames_storage.values = nullptr;
this->frames_storage.flag = 0;
this->opacity = 1.0f;
BLI_listbase_clear(&this->masks);
this->runtime = MEM_new<LayerRuntime>(__func__);

@ -28,6 +28,7 @@
#include "BLI_set.hh"
#include "BLI_string_ref.hh"
#include "BKE_grease_pencil.hh"
#include "BKE_idprop.hh"
#include "BKE_main.h"
#include "BKE_mesh_legacy_convert.h"
@ -404,5 +405,12 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
scene->r.im_format.flag &= ~R_IMF_FLAG_ZBUF_LEGACY;
}
}
/* Reset the layer opacity for all layers to 1. */
LISTBASE_FOREACH (GreasePencil *, grease_pencil, &bmain->grease_pencils) {
for (blender::bke::greasepencil::Layer *layer : grease_pencil->layers_for_write()) {
layer->opacity = 1.0f;
}
}
}
}

@ -31,20 +31,23 @@ class LayerModule {
}
void sync(const Object * /*object*/,
const bke::greasepencil::Layer & /*layer*/,
const bke::greasepencil::Layer &layer,
bool &do_layer_blending)
{
/* TODO(fclem): All of this is placeholder. */
gpLayer gp_layer;
gp_layer.vertex_color_opacity = 0.0f;
gp_layer.opacity = 1.0f;
gp_layer.thickness_offset = 0.0f;
gp_layer.tint = float4(1.0f, 1.0f, 1.0f, 0.0f);
gp_layer.stroke_index_offset = 0.0f;
layers_buf_.append(gp_layer);
gp_layer.opacity = layer.opacity;
do_layer_blending = false;
if (layer.opacity != 1.0f) {
do_layer_blending = true;
}
layers_buf_.append(gp_layer);
}
void end_sync()

@ -171,6 +171,8 @@ class ObjectModule {
// }
/* TODO(fclem): Only draw subrange of geometry for this layer. */
object_subpass.bind_texture("gp_pos_tx", position_tx);
object_subpass.bind_texture("gp_col_tx", color_tx);
object_subpass.draw(geom, handle);
/* TODO: Do layer blending. */

@ -208,6 +208,12 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(
prop, "Locked", "Protect layer from further editing and/or frame changes");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update");
/* Opacity */
prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "GreasePencilLayer", "opacity");
RNA_def_property_ui_text(prop, "Opacity", "Layer Opacity");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update");
}
static void rna_def_grease_pencil_layers_api(BlenderRNA *brna, PropertyRNA *cprop)