forked from bartvdbraak/blender
Merge branch 'blender-v2.91-release' into master
This commit is contained in:
commit
d9dd408b42
@ -490,7 +490,7 @@ void EEVEE_motion_blur_swap_data(EEVEE_Data *vedata)
|
||||
BLI_assert((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0);
|
||||
|
||||
/* 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. */
|
||||
for (BLI_ghashIterator_init(&ghi, effects->motion_blur.object);
|
||||
|
@ -13,16 +13,19 @@ void main()
|
||||
{
|
||||
/* Extract pixel motion vector from camera movement. */
|
||||
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;
|
||||
|
||||
vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv, depth) * 2.0 - 1.0);
|
||||
vec2 uv_prev = project_point(prevViewProjMatrix, world_position).xy * 0.5 + 0.5;
|
||||
vec2 uv_next = project_point(nextViewProjMatrix, world_position).xy * 0.5 + 0.5;
|
||||
uv_curr = uv_curr * 2.0 - 1.0;
|
||||
depth = depth * 2.0 - 1.0;
|
||||
|
||||
outData.xy = uv_prev - uv;
|
||||
outData.zw = uv_next - uv;
|
||||
vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv_curr, depth));
|
||||
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. */
|
||||
outData = outData * 0.5 + 0.5;
|
||||
|
@ -100,10 +100,10 @@ class FrameBuffer {
|
||||
/** Debug name. */
|
||||
char name_[DEBUG_NAME_LEN];
|
||||
/** Frame-buffer state. */
|
||||
int viewport_[4];
|
||||
int scissor_[4];
|
||||
int viewport_[4] = {0};
|
||||
int scissor_[4] = {0};
|
||||
bool scissor_test_ = false;
|
||||
bool dirty_state_;
|
||||
bool dirty_state_ = true;
|
||||
|
||||
public:
|
||||
FrameBuffer(const char *name);
|
||||
|
@ -47,7 +47,7 @@ class Immediate {
|
||||
|
||||
/** Current draw call specification. */
|
||||
GPUPrimType prim_type = GPU_PRIM_NONE;
|
||||
GPUVertFormat vertex_format;
|
||||
GPUVertFormat vertex_format = {};
|
||||
GPUShader *shader = NULL;
|
||||
/** Enforce strict vertex count (disabled when using immBeginAtMost). */
|
||||
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
|
||||
* GPU_BLEND_CUSTOM was used just before and the frame-buffer is using more than 1 color target.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user