Fix T76510: Eevee OpenVDB render artifacts due to texture clamping
This commit is contained in:
parent
5473f0c49d
commit
05fafb05b1
Notes:
blender-bot
2023-02-14 11:08:33 +01:00
Referenced by issue #76510, Eevee OpenVDB Bad Horizontal Bars
|
@ -505,7 +505,7 @@ static void studiolight_create_equirect_radiance_gputexture(StudioLight *sl)
|
|||
GPUTexture *tex = sl->equirect_radiance_gputexture;
|
||||
GPU_texture_bind(tex, 0);
|
||||
GPU_texture_filter_mode(tex, true);
|
||||
GPU_texture_wrap_mode(tex, true);
|
||||
GPU_texture_wrap_mode(tex, true, true);
|
||||
GPU_texture_unbind(tex);
|
||||
}
|
||||
sl->flag |= STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE;
|
||||
|
@ -569,7 +569,7 @@ static void studiolight_create_equirect_irradiance_gputexture(StudioLight *sl)
|
|||
GPUTexture *tex = sl->equirect_irradiance_gputexture;
|
||||
GPU_texture_bind(tex, 0);
|
||||
GPU_texture_filter_mode(tex, true);
|
||||
GPU_texture_wrap_mode(tex, true);
|
||||
GPU_texture_wrap_mode(tex, true, true);
|
||||
GPU_texture_unbind(tex);
|
||||
}
|
||||
sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE;
|
||||
|
|
|
@ -267,6 +267,7 @@ static DRWVolumeGrid *volume_grid_cache_get(Volume *volume,
|
|||
|
||||
GPU_texture_bind(cache_grid->texture, 0);
|
||||
GPU_texture_swizzle_channel_auto(cache_grid->texture, channels);
|
||||
GPU_texture_wrap_mode(cache_grid->texture, false, false);
|
||||
GPU_texture_unbind(cache_grid->texture);
|
||||
|
||||
MEM_freeN(voxels);
|
||||
|
|
|
@ -69,7 +69,7 @@ void drw_texture_set_parameters(GPUTexture *tex, DRWTextureFlag flags)
|
|||
else {
|
||||
GPU_texture_filter_mode(tex, flags & DRW_TEX_FILTER);
|
||||
}
|
||||
GPU_texture_wrap_mode(tex, flags & DRW_TEX_WRAP);
|
||||
GPU_texture_wrap_mode(tex, flags & DRW_TEX_WRAP, true);
|
||||
GPU_texture_compare_mode(tex, flags & DRW_TEX_COMPARE);
|
||||
GPU_texture_unbind(tex);
|
||||
}
|
||||
|
|
|
@ -245,7 +245,7 @@ void GPU_texture_generate_mipmap(GPUTexture *tex);
|
|||
void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare);
|
||||
void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter);
|
||||
void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter);
|
||||
void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat);
|
||||
void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat, bool use_clamp);
|
||||
void GPU_texture_filters(GPUTexture *tex,
|
||||
eGPUFilterFunction min_filter,
|
||||
eGPUFilterFunction mag_filter);
|
||||
|
|
|
@ -1856,11 +1856,11 @@ void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter)
|
|||
glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, filter);
|
||||
}
|
||||
|
||||
void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat)
|
||||
void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat, bool use_clamp)
|
||||
{
|
||||
WARN_NOT_BOUND(tex);
|
||||
|
||||
GLenum repeat = (use_repeat) ? GL_REPEAT : GL_CLAMP_TO_EDGE;
|
||||
GLenum repeat = (use_repeat) ? GL_REPEAT : (use_clamp) ? GL_CLAMP_TO_EDGE : GL_CLAMP_TO_BORDER;
|
||||
|
||||
glActiveTexture(GL_TEXTURE0 + tex->number);
|
||||
glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, repeat);
|
||||
|
@ -1870,6 +1870,11 @@ void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat)
|
|||
if (tex->target_base == GL_TEXTURE_3D) {
|
||||
glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_R, repeat);
|
||||
}
|
||||
|
||||
if (repeat == GL_CLAMP_TO_BORDER) {
|
||||
const float black[] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, black);
|
||||
}
|
||||
}
|
||||
|
||||
void GPU_texture_swizzle_channel_auto(GPUTexture *tex, int channels)
|
||||
|
|
Loading…
Reference in New Issue