[Bf-blender-cvs] [dc5fb28c272] tmp-workbench-rewrite2: texture mode

Miguel Pozo noreply at git.blender.org
Thu Oct 13 13:06:49 CEST 2022


Commit: dc5fb28c2723adbb10136a7714e9535754ff074d
Author: Miguel Pozo
Date:   Thu Oct 13 12:34:06 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rBdc5fb28c2723adbb10136a7714e9535754ff074d

texture mode

===================================================================

M	source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
M	source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
M	source/blender/draw/engines/workbench/workbench_defines.hh
M	source/blender/draw/engines/workbench/workbench_mesh_passes.cc

===================================================================

diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
index f4db7bc522f..22f24c99e7b 100644
--- a/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
@@ -127,8 +127,10 @@ GPU_SHADER_CREATE_INFO(workbench_color_material)
 GPU_SHADER_CREATE_INFO(workbench_color_texture)
     .define("WORKBENCH_COLOR_TEXTURE")
     .define("WORKBENCH_TEXTURE_IMAGE_ARRAY")
+    .sampler(1, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH)
     .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH)
     .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH)
+    .push_constant(Type::BOOL, "isImageTile")
     .push_constant(Type::BOOL, "imagePremult")
     .push_constant(Type::FLOAT, "imageTransparencyCutoff");
 
@@ -247,4 +249,4 @@ WORKBENCH_GEOMETRY_VARIATIONS(workbench_next_prepass, "workbench_next_prepass");
 #undef WORKBENCH_DATATYPE_VARIATIONS
 #undef WORKBENCH_PIPELINE_VARIATIONS
 
-/** \} */
\ No newline at end of file
+/** \} */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
index 1f074b62b8a..b107963575c 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl
@@ -30,7 +30,24 @@ vec3 workbench_image_color(vec2 uvs)
 #ifdef WORKBENCH_COLOR_TEXTURE
   vec4 color;
 
-#  ifdef WORKBENCH_TEXTURE_IMAGE_ARRAY
+#  ifdef WORKBENCH_NEXT
+
+  vec3 co = vec3(uvs, 0.0);
+  if (isImageTile) {
+    if (node_tex_tile_lookup(co, imageTileArray, imageTileData)) {
+      color = texture(imageTileArray, co);
+    }
+    else {
+      color = vec4(1.0, 0.0, 1.0, 1.0);
+    }
+  }
+  else {
+    color = texture(imageTexture, uvs);
+  }
+
+#  else  // WORKBENCH_NEXT
+
+#    ifdef WORKBENCH_TEXTURE_IMAGE_ARRAY
   vec3 co = vec3(uvs, 0.0);
   if (node_tex_tile_lookup(co, imageTileArray, imageTileData)) {
     color = texture(imageTileArray, co);
@@ -38,10 +55,12 @@ vec3 workbench_image_color(vec2 uvs)
   else {
     color = vec4(1.0, 0.0, 1.0, 1.0);
   }
-#  else
+#    else
 
   color = texture(imageTexture, uvs);
-#  endif
+#    endif
+
+#  endif  // WORKBENCH_NEXT
 
   /* Unpremultiply if stored multiplied, since straight alpha is expected by shaders. */
   if (imagePremult && !(color.a == 0.0 || color.a == 1.0)) {
diff --git a/source/blender/draw/engines/workbench/workbench_defines.hh b/source/blender/draw/engines/workbench/workbench_defines.hh
index 2b85c19b0a3..4dfd69d9d50 100644
--- a/source/blender/draw/engines/workbench/workbench_defines.hh
+++ b/source/blender/draw/engines/workbench/workbench_defines.hh
@@ -2,7 +2,8 @@
 
 #define WB_MATCAP_SLOT 0
 #define WB_TEXTURE_SLOT 1
-#define WB_TILEMAP_SLOT 2
+#define WB_TILE_ARRAY_SLOT 2
+#define WB_TILE_DATA_SLOT 3
 #define WB_MATERIAL_SLOT 0
 #define WB_WORLD_SLOT 4
 
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index 6977c96543a..171b094634b 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -104,18 +104,23 @@ PassMain::Sub &MeshPass::sub_pass_get(eGeometryType geometry_type,
     GPUTexture *texture = nullptr;
     GPUTexture *tilemap = nullptr;
     eGPUSamplerState sampler_state = GPU_SAMPLER_DEFAULT;
-    StringRefNull name = "Null Texture";
     get_image(ref.object, material_index, image, texture, tilemap, sampler_state);
     if (image && texture) {
       /* TODO(pragma37): Should be lib.name + name ??? */
-      name = image->id.name;
+      StringRefNull name = image->id.name;
 
       auto add_cb = [&] {
         PassMain::Sub *sub_pass =
             passes_[static_cast<int>(geometry_type)][static_cast<int>(color_type)];
         sub_pass = &sub_pass->sub(name.c_str());
-        sub_pass->bind_texture(WB_TEXTURE_SLOT, texture, sampler_state);
-        sub_pass->bind_texture(WB_TILEMAP_SLOT, tilemap);
+        if (tilemap) {
+          sub_pass->bind_texture(WB_TILE_ARRAY_SLOT, texture, sampler_state);
+          sub_pass->bind_texture(WB_TILE_DATA_SLOT, tilemap);
+        }
+        else {
+          sub_pass->bind_texture(WB_TEXTURE_SLOT, texture, sampler_state);
+        }
+        sub_pass->push_constant("isImageTile", tilemap != nullptr);
         sub_pass->push_constant("imagePremult", image && image->alpha_mode == IMA_ALPHA_PREMUL);
         /*TODO(pragma37): What's the point? This could be a constant in the shader. */
         sub_pass->push_constant("imageTransparencyCutoff", 0.1f);



More information about the Bf-blender-cvs mailing list