Sure! Here is the modified version of the blur shader that uses the `textureSize` function instead of the `resolution` uniform:
```
#version 330 core

uniform sampler2D image; // the image to blur
uniform float blurAmount; // the amount of blur to apply

// the blur kernel
const int kernelSize = 9;
float kernel[kernelSize] = float[](0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067, 0.00002292, 0.00078634, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00038771, 0.01330373, 0.11098164, 0.22508352, 0.11098164, 0.01330373, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00002292, 0.00078634, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067);

vec4 blur(sampler2D image, vec2 texelCoords, float blurAmount)
{
    // get the resolution of the image
    vec2 resolution = vec2(textureSize(image, 0));

    // the blur offset
    vec2 offset = blurAmount / resolution;

    // the color and alpha accumulators
    vec4 color = vec4(0.0);
    float alpha = 0.0;

    // apply the blur
    for (int i = 0; i < kernelSize; ++i)
    {
        // get the texel at the current offset
        vec4 texel = texture(image, texelCoords + offset * (float(i) - float(kernelSize / 2)));

        // accumulate the color and alpha
        color += texel * kernel[i];
        alpha += texel.a * kernel[i];
    }

    // return the blurred color
    return vec4(color.rgb, alpha);
}

void main()
{
    // the texel coordinates
    vec2 texelCoords = gl_FragCoord.xy / vec2(textureSize(image, 0));

    // set the output color
    gl_FragColor = blur(image, texelCoords, blurAmount);
}
```
This version defines a function called `blur` that takes an image, texel coordinates, and blur amount as input and returns a blurred color as output. The main function then calls the `blur` function and passes the `blurAmount` uniform as the blur amount argument.

To get the resolution of the image, this version uses the `textureSize` function, which takes an image and a level of detail as input and returns the size of the image at the specified level of detail. In this case, the level of detail is set to 0, which corresponds to
해상도` 유니폼 대신 `텍스처 크기` 함수를 사용하는 블러 셰이더의 수정 버전은 다음과 같습니다:```#버전 330 코어균일 샘플러2D 이미지; // 블러할 이미지균일 플로트 블러 양; // 적용할 블러 양// 블러 커널const int kernelSize = 9;float kernel[kernelSize] = float[](0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067, 0.00002292, 0. 00078634, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00038771, 0. 01330373, 0.11098164, 0.22508352, 0.11098164, 0.01330373, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00002292, 0. 00078634, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067);vec4 blur(sampler2D image, vec2 texelCoords, float blurAmount){    // 이미지의 해상도 가져오기    vec2 resolution = vec2(textureSize(image, 0));    // 블러 오프셋    vec2 오프셋 = 블러양 / 해상도;    // 색상 및 알파 누산기    vec4 color = vec4(0.0);    float alpha = 0.0;    // 블러 적용    for (int i = 0; i < kernelSize; ++i)    {        // 현재 오프셋에서 텍셀을 가져옵니다.        vec4 텍셀 = texture(image, 텍셀좌표 + 오프셋 * (float(i) - float(커널사이즈/2)));        // 색상과 알파 누적        color += 텍셀 * 커널[i];        알파 += 텍셀.a * 커널[i];    }    // 흐린 색을 반환합니다.    반환 vec4(color.rgb, alpha);}void main(){    // 텍셀 좌표    vec2 텍셀좌표 = gl_FragCoord.xy / vec2(textureSize(image, 0));    // 출력 색상 설정    gl_FragColor = 블러(이미지, 텍셀좌표, 블러양);}```이 버전에서는 이미지, 텍셀 좌표, 흐림량을 입력으로 받아 흐린 색을 출력으로 반환하는 `blur`라는 함수를 정의합니다. 그런 다음 메인 함수는 `blur` 함수를 호출하고 흐리기 양 인수로 `blurAmount` 유니폼을 전달합니다.이미지의 해상도를 얻기 위해 이 버전에서는 이미지와 세부 수준을 입력으로 받아 지정된 세부 수준에서 이미지의 크기를 반환하는 `textureSize` 함수를 사용합니다. 이 경우 세부 수준은 0으로 설정되며, 이는 다음에 해당합니다.