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:
parent
7f905a0b06
commit
1629eb61a1
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user