Update webrender (prim cache changes, blend/composite shaders).

This commit is contained in:
Glenn Watson 2016-09-20 10:57:48 +10:00
parent be72afc804
commit 7c8664e6ec
5 changed files with 27 additions and 30 deletions

View file

@ -508,39 +508,31 @@ AngleGradient fetch_angle_gradient(int index) {
}
struct Blend {
vec4 target_rect;
vec4 src_rect;
vec4 opacity;
vec4 src_id_target_id_opacity;
};
Blend fetch_blend(int index) {
Blend blend;
int offset = index * 3;
int offset = index * 1;
blend.target_rect = data[offset + 0];
blend.src_rect = data[offset + 1];
blend.opacity = data[offset + 2];
blend.src_id_target_id_opacity = data[offset + 0];
return blend;
}
struct Composite {
vec4 src0;
vec4 src1;
vec4 target_rect;
vec4 src0_src1_target_id;
vec4 info_amount;
};
Composite fetch_composite(int index) {
Composite composite;
int offset = index * 4;
int offset = index * 2;
composite.src0 = data[offset + 0];
composite.src1 = data[offset + 1];
composite.target_rect = data[offset + 2];
composite.info_amount = data[offset + 3];
composite.src0_src1_target_id = data[offset + 0];
composite.info_amount = data[offset + 1];
return composite;
}

View file

@ -5,15 +5,17 @@
void main(void) {
Blend blend = fetch_blend(gl_InstanceID);
Tile src = fetch_tile(int(blend.src_id_target_id_opacity.x));
Tile dest = fetch_tile(int(blend.src_id_target_id_opacity.y));
vec2 local_pos = mix(vec2(blend.target_rect.xy),
vec2(blend.target_rect.xy + blend.target_rect.zw),
vec2 local_pos = mix(vec2(dest.target_rect.xy),
vec2(dest.target_rect.xy + dest.target_rect.zw),
aPosition.xy);
vec2 st0 = vec2(blend.src_rect.xy) / 2048.0;
vec2 st1 = vec2(blend.src_rect.xy + blend.src_rect.zw) / 2048.0;
vec2 st0 = vec2(src.target_rect.xy) / 2048.0;
vec2 st1 = vec2(src.target_rect.xy + src.target_rect.zw) / 2048.0;
vUv = mix(st0, st1, aPosition.xy);
vOpacity = blend.opacity.x;
vOpacity = blend.src_id_target_id_opacity.z;
gl_Position = uTransform * vec4(local_pos, 0, 1);
}

View file

@ -5,17 +5,20 @@
void main(void) {
Composite composite = fetch_composite(gl_InstanceID);
Tile src0 = fetch_tile(int(composite.src0_src1_target_id.x));
Tile src1 = fetch_tile(int(composite.src0_src1_target_id.y));
Tile dest = fetch_tile(int(composite.src0_src1_target_id.z));
vec2 local_pos = mix(vec2(composite.target_rect.xy),
vec2(composite.target_rect.xy + composite.target_rect.zw),
vec2 local_pos = mix(vec2(dest.target_rect.xy),
vec2(dest.target_rect.xy + dest.target_rect.zw),
aPosition.xy);
vec2 st0 = vec2(composite.src0.xy) / 2048.0;
vec2 st1 = vec2(composite.src0.xy + composite.src0.zw) / 2048.0;
vec2 st0 = vec2(src0.target_rect.xy) / 2048.0;
vec2 st1 = vec2(src0.target_rect.xy + src0.target_rect.zw) / 2048.0;
vUv0 = mix(st0, st1, aPosition.xy);
st0 = vec2(composite.src1.xy) / 2048.0;
st1 = vec2(composite.src1.xy + composite.src1.zw) / 2048.0;
st0 = vec2(src1.target_rect.xy) / 2048.0;
st1 = vec2(src1.target_rect.xy + src1.target_rect.zw) / 2048.0;
vUv1 = mix(st0, st1, aPosition.xy);
vInfo = ivec2(composite.info_amount.xy);