If anyone has some free time could they help me out with putting this in crt-guest-dr-venom?
I’m just not sure how to pipe it in at the end.
EDIT: I’m supposed to take the big mask code block put it in, then in the voidmain area at the end apply this (this is what actually adds the mask to the screen)?
vec3 mask_weights(vec2 coord, float mask_intensity, int phosphor_layout){
vec3 weights = vec3(0.,0.,0.);
float intens = 1.;
float inv = 1.-mask_intensity;
vec3 green = vec3(inv, intens, inv);
vec3 magenta = vec3(intens,inv,intens);
vec3 black = vec3(inv,inv,inv);
vec3 red = vec3(intens,inv,inv);
vec3 yellow = vec3(intens,inv,intens);
vec3 cyan = vec3(inv,intens,intens);
vec3 blue = vec3(inv,inv,intens);
int w, z = 0;
vec3 aperture_weights = mix(magenta, green, floor(mod(coord.x, 2.0)));
if(phosphor_layout == 1){
// classic aperture for RGB panels; good for 1080p, too small for 4K+
weights = aperture_weights;
}
else if(phosphor_layout == 2){
// 2x2 shadow mask for RGB panels; good for 1080p, too small for 4K+
vec3 inverse_aperture = mix(green, magenta, floor(mod(coord.x, 2.0)));
weights = mix(aperture_weights, inverse_aperture, floor(mod(coord.y, 2.0)));
}
else if(phosphor_layout == 3){
// slot mask for RGB panels; too low-pitched for 1080p, looks okay at 4K but wants 8K+
// Can't do 2D arrays until version 430, so do this stupid thing instead
// first lay out the horizontal pixels in arrays
vec3 slotmask_x1[6] = vec3[](magenta,green,black,magenta,green,black);
vec3 slotmask_x2[6] = vec3[](magenta,green,black,black,black,black);
vec3 slotmask_x3[6] = vec3[](magenta,green,black,magenta,green,black);
vec3 slotmask_x4[6] = vec3[](black,black,black,magenta,green,black);
// find the vertical index
w = int(floor(mod(coord.y, 4.0)));
// find the horizontal index
z = int(floor(mod(coord.x, 6.0)));
// do a big, dumb comparison in place of a 2D array
weights = (w == 1) ? slotmask_x1[z] : (w == 2) ? slotmask_x2[z] : (w == 3) ? slotmask_x3[z] : slotmask_x4[z];
}
if(phosphor_layout == 4){
// classic aperture for RBG panels; good for 1080p, too small for 4K+
weights = mix(yellow, blue, floor(mod(coord.x, 2.0)));
}
else if(phosphor_layout == 5){
// 2x2 shadow mask for RBG panels; good for 1080p, too small for 4K+
vec3 inverse_aperture = mix(blue, yellow, floor(mod(coord.x, 2.0)));
weights = mix(mix(yellow, blue, floor(mod(coord.x, 2.0))), inverse_aperture, floor(mod(coord.y, 2.0)));
}
else if(phosphor_layout == 6){
// aperture_1_4_rgb
vec3 ap4[4] = vec3[](red, green, blue, black);
z = int(floor(mod(coord.x, 4.0)));
weights = ap4[z];
}
else if(phosphor_layout == 7){
// aperture_2_5_bgr
vec3 ap3[5] = vec3[](red, magenta, blue, green, green);
z = int(floor(mod(coord.x, 5.0)));
weights = ap3[z];
}
else if(phosphor_layout == 8){
// aperture_3_6_rgb
vec3 big_ap[7] = vec3[](red, red, yellow, green, cyan, blue, blue);
w = int(floor(mod(coord.x, 8.)));
weights = big_ap[w];
}
else if(phosphor_layout == 9){
// reduced TVL aperture for RGB panels
vec3 big_ap_rgb[4] = vec3[](red, yellow, cyan, blue);
w = int(floor(mod(coord.x, 4.)));
weights = big_ap_rgb[w];
}
else if(phosphor_layout == 10){
// reduced TVL aperture for RBG panels
vec3 big_ap_rbg[4] = vec3[](red, magenta, cyan, green);
w = int(floor(mod(coord.x, 4.)));
weights = big_ap_rbg[w];
}
else if(phosphor_layout == 11){
// delta_1_4x1_rgb; dunno why this is called 4x1 when it's obviously 4x2 /shrug
vec3 delta_1_1[4] = vec3[](red, green, blue, black);
vec3 delta_1_2[4] = vec3[](blue, black, red, green);
w = int(floor(mod(coord.y, 2.0)));
z = int(floor(mod(coord.x, 4.0)));
weights = (w == 1) ? delta_1_1[z] : delta_1_2[z];
}
else if(phosphor_layout == 12){
// delta_2_4x1_rgb
vec3 delta_2_1[4] = vec3[](red, yellow, cyan, blue);
vec3 delta_2_2[4] = vec3[](cyan, blue, red, yellow);
z = int(floor(mod(coord.x, 4.0)));
weights = (w == 1) ? delta_2_1[z] : delta_2_2[z];
}
else if(phosphor_layout == 13){
// delta_2_4x2_rgb
vec3 delta_1[4] = vec3[](red, yellow, cyan, blue);
vec3 delta_2[4] = vec3[](red, yellow, cyan, blue);
vec3 delta_3[4] = vec3[](cyan, blue, red, yellow);
vec3 delta_4[4] = vec3[](cyan, blue, red, yellow);
w = int(floor(mod(coord.y, 4.0)));
z = int(floor(mod(coord.x, 4.0)));
weights = (w == 1) ? delta_1[z] : (w == 2) ? delta_2[z] : (w == 3) ? delta_3[z] : delta_4[z];
}
else if(phosphor_layout == 14){
// slot_2_4x4_rgb
vec3 slot2_1[8] = vec3[](red, yellow, cyan, blue, red, yellow, cyan, blue);
vec3 slot2_2[8] = vec3[](red, yellow, cyan, blue, black, black, black, black);
vec3 slot2_3[8] = vec3[](red, yellow, cyan, blue, red, yellow, cyan, blue);
vec3 slot2_4[8] = vec3[](black, black, black, black, red, yellow, cyan, blue);
w = int(floor(mod(coord.y, 4.0)));
z = int(floor(mod(coord.x, 8.0)));
weights = (w == 1) ? slot2_1[z] : (w == 2) ? slot2_2[z] : (w == 3) ? slot2_3[z] : slot2_4[z];
}
else if(phosphor_layout == 15){
// slot mask for RBG panels; too low-pitched for 1080p, looks okay at 4K but wants 8K+
vec3 slotmask_RBG_x1[6] = vec3[](yellow,blue,black,yellow,blue,black);
vec3 slotmask_RBG_x2[6] = vec3[](yellow,blue,black,black,black,black);
vec3 slotmask_RBG_x3[6] = vec3[](yellow,blue,black,yellow,blue,black);
vec3 slotmask_RBG_x4[6] = vec3[](black,black,black,yellow,blue,black);
// find the vertical index
w = int(floor(mod(coord.y, 4.0)));
// find the horizontal index
z = int(floor(mod(coord.x, 6.0)));
weights = (w == 1) ? slotmask_RBG_x1[z] : (w == 2) ? slotmask_RBG_x2[z] : (w == 3) ? slotmask_RBG_x3[z] : slotmask_RBG_x4[z];
}
else if(phosphor_layout == 16){
// slot_2_5x4_bgr
vec3 slot2_1[10] = vec3[](red, magenta, blue, green, green, red, magenta, blue, green, green);
vec3 slot2_2[10] = vec3[](black, blue, blue, green, green, red, red, black, black, black);
vec3 slot2_3[10] = vec3[](red, magenta, blue, green, green, red, magenta, blue, green, green);
vec3 slot2_4[10] = vec3[](red, red, black, black, black, black, blue, blue, green, green);
w = int(floor(mod(coord.y, 4.0)));
z = int(floor(mod(coord.x, 10.0)));
weights = (w == 1) ? slot2_1[z] : (w == 2) ? slot2_2[z] : (w == 3) ? slot2_3[z] : slot2_4[z];
}
else if(phosphor_layout == 17){
// slot_3_7x6_rgb
vec3 slot_1[14] = vec3[](red, red, yellow, green, cyan, blue, blue, red, red, yellow, green, cyan, blue, blue);
vec3 slot_2[14] = vec3[](red, red, yellow, green, cyan, blue, blue, red, red, yellow, green, cyan, blue, blue);
vec3 slot_3[14] = vec3[](red, red, yellow, green, cyan, blue, blue, black, black, black, black, black, black, black);
vec3 slot_4[14] = vec3[](red, red, yellow, green, cyan, blue, blue, red, red, yellow, green, cyan, blue, blue);
vec3 slot_5[14] = vec3[](red, red, yellow, green, cyan, blue, blue, red, red, yellow, green, cyan, blue, blue);
vec3 slot_6[14] = vec3[](black, black, black, black, black, black, black, black, red, red, yellow, green, cyan, blue);
w = int(floor(mod(coord.y, 6.0)));
z = int(floor(mod(coord.x, 14.0)));
weights = (w == 1) ? slot_1[z] : (w == 2) ? slot_2[z] : (w == 3) ? slot_3[z] : (w == 4) ? slot_4[z] : (w == 5) ? slot_5[z] : slot_6[z];
}
return weights;
}
color *= mask_weights(gl_FragCoord.xy, 1.0, 4);
Also how do I adjust the mask strength?
Thank in advanced for taking the time to help!