Как сделать blur в gui без шейдеров

Версия Minecraft
1.12.2
API
Forge
32
4
Ну неужели так нельзя?

Много читал все говорили без шейдеров никак. А как же другие программы? У них тоже шейдеры?) Уверен на 99999% что такой способ есть. Есть идеи у кого нибудь?
 
808
3
124
Без шейдеров вариант как бы один: получить из опенгл изображение в основную память, заблюрить, загрузить обратно, нарисовать новое изображение поверх. Если получится три кадра в секунду - можно считать за успех.
 
7,099
324
1,510
Ты хочешь 3 фпс?
 
202
14
36
Дерзай, удачи)
Java:
public static BufferedImage blur(BufferedImage source, int radius) {
        BufferedImage img = new BufferedImage(source.getWidth() + radius
                * 2, source.getHeight() + radius * 2,
                BufferedImage.TYPE_4BYTE_ABGR);
        Graphics2D g2 = (Graphics2D) img.getGraphics();
        g2.setColor(new Color(0, 0, 0));
        g2.fillRect(0, 0, source.getWidth() + radius * 2,
                source.getHeight() + radius * 2);
        g2.drawImage(source, radius, radius, null);
        g2.dispose();

        int square = radius * radius;
        float sum = 0;
        float[] matrix = new float[square];
        for (int i = 0; i < square; i++) {
            int dx = i % radius - radius / 2;
            int dy = i / radius - radius / 2;
            matrix[i] = (float) (radius - Math.sqrt(dx * dx + dy * dy));
            sum += matrix[i];
        }
        for (int i = 0; i < square; i++) {
            matrix[i] /= sum;
        }

        BufferedImageOp op = new ConvolveOp(new Kernel(radius, radius,
                matrix), ConvolveOp.EDGE_ZERO_FILL, null);

        BufferedImage res = op.filter(img, null);

        BufferedImage out = new BufferedImage(source.getWidth(),
                source.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);

        Graphics2D g3 = (Graphics2D) out.getGraphics();
        g3.drawImage(res, -radius, -radius, null);
        g3.dispose();
        return out;
    }
 
Последнее редактирование:
Сверху