[Bf-blender-cvs] [439dfabaeb3] tmp-workbench-rewrite2: matcaps
Miguel Pozo
noreply at git.blender.org
Tue Oct 11 21:33:08 CEST 2022
Commit: 439dfabaeb3a5d0c4279ee694391a65eb1bcf35a
Author: Miguel Pozo
Date: Tue Oct 11 21:32:30 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB439dfabaeb3a5d0c4279ee694391a65eb1bcf35a
matcaps
===================================================================
M source/blender/draw/engines/workbench/workbench_engine.cc
===================================================================
diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index ab20ad49e6a..43946f4b498 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -4,6 +4,7 @@
#include "DEG_depsgraph_query.h"
#include "ED_view3d.h"
#include "GPU_capabilities.h"
+#include "IMB_imbuf_types.h"
#include "workbench_private.hh"
@@ -41,6 +42,7 @@ class Instance {
View3DShading shading;
+ StringRefNull current_matcap;
void init(const int2 &output_res,
const Depsgraph *depsgraph,
const Object * /*camera*/,
@@ -132,6 +134,26 @@ class Instance {
else {
if (shading_type == eShadingType::MATCAP) {
studio_light = BKE_studiolight_find(shading.matcap, STUDIOLIGHT_TYPE_MATCAP);
+ if (studio_light && studio_light->name != current_matcap) {
+ ImBuf *matcap_diffuse = studio_light->matcap_diffuse.ibuf;
+ ImBuf *matcap_specular = studio_light->matcap_specular.ibuf;
+ if (matcap_diffuse && matcap_diffuse->rect_float) {
+ current_matcap = studio_light->name;
+ int size = matcap_diffuse->x * matcap_diffuse->y * 4;
+ int layers = 1;
+ Vector<float> load_buffer = {};
+ load_buffer.extend(matcap_diffuse->rect_float, size);
+ if (matcap_specular && matcap_specular->rect_float) {
+ load_buffer.extend(matcap_specular->rect_float, size);
+ layers++;
+ }
+ resources.matcap_tx = Texture(current_matcap.c_str(),
+ GPU_RGBA16F,
+ int2(matcap_diffuse->x, matcap_diffuse->y),
+ layers,
+ load_buffer.begin());
+ }
+ }
}
/* If matcaps are missing, use this as fallback. */
if (studio_light == nullptr) {
@@ -181,7 +203,9 @@ class Instance {
/* TODO(pragma37) volumes_do */
- resources.matcap_tx.ensure_2d_array(GPU_RGBA16F, int2(1), 1);
+ if (!resources.matcap_tx.is_valid()) {
+ resources.matcap_tx.ensure_2d_array(GPU_RGBA16F, int2(1), 1);
+ }
resources.depth_tx.ensure_2d(GPU_DEPTH24_STENCIL8, output_res);
anti_aliasing_ps.init(reset_taa);
More information about the Bf-blender-cvs
mailing list