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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs