Merge branch 'blender-v2.91-release' into master

This commit is contained in:
Clément Foucault 2020-11-05 18:00:48 +01:00
commit d9dd408b42
5 changed files with 21 additions and 11 deletions

@ -490,7 +490,7 @@ void EEVEE_motion_blur_swap_data(EEVEE_Data *vedata)
BLI_assert((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0); BLI_assert((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0);
/* Camera Data. */ /* Camera Data. */
effects->motion_blur.camera[MB_PREV] = effects->motion_blur.camera[MB_CURR]; effects->motion_blur.camera[MB_PREV] = effects->motion_blur.camera[MB_NEXT];
/* Object Data. */ /* Object Data. */
for (BLI_ghashIterator_init(&ghi, effects->motion_blur.object); for (BLI_ghashIterator_init(&ghi, effects->motion_blur.object);

@ -13,16 +13,19 @@ void main()
{ {
/* Extract pixel motion vector from camera movement. */ /* Extract pixel motion vector from camera movement. */
ivec2 texel = ivec2(gl_FragCoord.xy); ivec2 texel = ivec2(gl_FragCoord.xy);
vec2 uv = gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0).xy); vec2 uv_curr = gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0).xy);
float depth = texelFetch(depthBuffer, texel, 0).r; float depth = texelFetch(depthBuffer, texel, 0).r;
vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv, depth) * 2.0 - 1.0); uv_curr = uv_curr * 2.0 - 1.0;
vec2 uv_prev = project_point(prevViewProjMatrix, world_position).xy * 0.5 + 0.5; depth = depth * 2.0 - 1.0;
vec2 uv_next = project_point(nextViewProjMatrix, world_position).xy * 0.5 + 0.5;
outData.xy = uv_prev - uv; vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv_curr, depth));
outData.zw = uv_next - uv; vec2 uv_prev = project_point(prevViewProjMatrix, world_position).xy;
vec2 uv_next = project_point(nextViewProjMatrix, world_position).xy;
outData.xy = uv_prev - uv_curr;
outData.zw = uv_next - uv_curr;
/* Encode to unsigned normalized 16bit texture. */ /* Encode to unsigned normalized 16bit texture. */
outData = outData * 0.5 + 0.5; outData = outData * 0.5 + 0.5;

@ -100,10 +100,10 @@ class FrameBuffer {
/** Debug name. */ /** Debug name. */
char name_[DEBUG_NAME_LEN]; char name_[DEBUG_NAME_LEN];
/** Frame-buffer state. */ /** Frame-buffer state. */
int viewport_[4]; int viewport_[4] = {0};
int scissor_[4]; int scissor_[4] = {0};
bool scissor_test_ = false; bool scissor_test_ = false;
bool dirty_state_; bool dirty_state_ = true;
public: public:
FrameBuffer(const char *name); FrameBuffer(const char *name);

@ -47,7 +47,7 @@ class Immediate {
/** Current draw call specification. */ /** Current draw call specification. */
GPUPrimType prim_type = GPU_PRIM_NONE; GPUPrimType prim_type = GPU_PRIM_NONE;
GPUVertFormat vertex_format; GPUVertFormat vertex_format = {};
GPUShader *shader = NULL; GPUShader *shader = NULL;
/** Enforce strict vertex count (disabled when using immBeginAtMost). */ /** Enforce strict vertex count (disabled when using immBeginAtMost). */
bool strict_vertex_len = true; bool strict_vertex_len = true;

@ -437,6 +437,13 @@ void GLStateManager::set_blend(const eGPUBlend value)
} }
} }
if (value == GPU_BLEND_SUBTRACT) {
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
}
else {
glBlendEquation(GL_FUNC_ADD);
}
/* Always set the blend function. This avoid a rendering error when blending is disabled but /* Always set the blend function. This avoid a rendering error when blending is disabled but
* GPU_BLEND_CUSTOM was used just before and the frame-buffer is using more than 1 color target. * GPU_BLEND_CUSTOM was used just before and the frame-buffer is using more than 1 color target.
*/ */