COSC-3P93-Project/Step 3/resources/opencl/image.cl

56 lines
1.6 KiB
Common Lisp

__constant sampler_t sampler = CLK_NORMALIZED_COORDS_TRUE |
CLK_ADDRESS_CLAMP_TO_EDGE |
CLK_FILTER_NEAREST;
float getColor(int x, int y){
return sin((x / 512.0) / cos(y / 512.0)) * cos((x / 512.0) * sin(y / 512.0));
}
float getColorInv(int x, int y){
return sin((x / 256.0) / cos(y / 128.0)) * cos((x / 512.0) * sin(y / 512.0));
}
float getColorCRR(int x, int y){
return x / y * sin(y / x * 512.0) - cos(y / 128.0);
}
float finalFactor(float x){
return cos(x / 32.0) * 32.0;
}
float factor(int x, int y){
return sin(x / 32.0) * finalFactor(y);
}
float oldFactor(int x){
return sin(x / 128.0) / 2;
}
__kernel void drawImage(__write_only image2d_t output, __read_only image2d_t input) {
// Get the index of the current element to be processed
int x = get_global_id(0);
int y = get_global_id(1);
float4 oldImage = read_imagef(input, (int2)(x, y));
float r = oldImage.x * oldFactor(x + y);
float g = oldImage.y * oldFactor(x + y);
float b = oldImage.z * oldFactor(x + y);
float colorR = (getColor(x, y) * r) / 32.0;
float colorG = (getColorInv(x, y) * g) / 32.0;
float colorB = (getColorCRR(x, y) * b) / 32.0;
float4 totalColor = (float4)(colorR, colorG, colorB, 1.0);
for (int i = -3; i <= 3; i++){
for (int j = -3; j <= 3; j++){
totalColor = totalColor + (read_imagef(input, (int2)(x + i, y + j)) * factor(i, j));
}
}
totalColor = totalColor / (float4)(9.0, 9.0, 9.0, 1.0);
write_imagef(output, (int2)(x, y), (float4)(totalColor.x, totalColor.y, totalColor.z, 1.0));
}