1. JavaScript / Говнокод #27843

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    async init() {
                    const engine = this.engine = new BABYLON.WebGPUEngine(this.canvas);
                    await engine.initAsync();
                }
    
                async initCompute() {
                    const supportCS = this.engine.getCaps().supportComputeShaders;
                    if (!supportCS) {
                        return true;
                    }
    
                    const computeShaderSource = document.getElementById("calculate").value.replace('WORK_GROUP_SIZE', this.WORK_GROUP_SIZE);
                    this.computeShader = new BABYLON.ComputeShader("compute", this.engine, { computeSource: computeShaderSource }, {
                        bindingsMapping:
                        {
                            "params": { group: 0, binding: 0 },
                            "ssboIn": { group: 0, binding: 1 },
                            "ssboOut": { group: 0, binding: 2 },
                        }
                    });
    
                    const simParamsBuffer = new BABYLON.UniformBuffer(this.engine);
                    simParamsBuffer.updateFloat2("time", t, this.numInstances);
                    simParamsBuffer.update();
    
                    const ssboInBuffer = new BABYLON.StorageBuffer(this.engine, this.ssboData.byteLength);
                    ssboInBuffer.update(this.ssboData);
    
                    const ssboOutBuffer = new BABYLON.StorageBuffer(this.engine, this.ssboData.byteLength);
    
                    this.computeShader.setUniformBuffer("params", simParamsBuffer);
                    this.computeShader.setStorageBuffer("ssboIn", ssboInBuffer);
                    this.computeShader.setStorageBuffer("ssboOut", ssboOutBuffer);
                                    
                    const handler = () => {
                        ssboOutBuffer.read().then((res) => {
                            const resFloats = new Float32Array(res.buffer);
                            //console.log(resFloats);
                            this.ssboData.set(resFloats);
    
                            ssboInBuffer.update(this.ssboData);
                            this.computeShader.setStorageBuffer("ssboIn", ssboInBuffer);
                            this.computeShader.dispatchWhenReady(this.numGroups).then(handler);                
    
                            this.loadPositions();
                        });
                    };
    
                    this.computeShader.dispatchWhenReady(this.numGroups).then(handler);                
                }

    Наговнокодить кому нибудь Compute Shader для WebGPU? полный код тут https://pastebin.com/EigxhfqV . Тут короче симуляция гравитации расчетным методом... просто было делать нехрен и скушно... что бы запустить это говно надо Chrome Canary с включенным WebGPU поддержкой.

    Запостил: ASD_77, 28 Ноября 2021

    Комментарии (20) RSS

    • а это мой любимый шейдер https://pastebin.com/DuSu1Et3
      Ответить
      • > var G = 6.67408313131E-11;
        > var force = G * m1 * m2 / distanceSquared;

        У вас петух уплыл.
        Ответить
        • куда уплыл - от меня еще никто не уплывал
          Ответить
          • Опять старый Ахав помешался и пытается прибить моби-хуя
            Ответить
        • > E-11
          > single precision
          И правда — уплыл, и уплыл очень далеко.
          Ответить
          • В жс даблы вроде?

            А, Float32Array.
            Ответить
            • А, действительно, даблы. Помнил про 53 бита Number.MAX_SAFE_INTEGER, но под вечер отдел интерпретации не смог правильно обработать информацию.
              Ответить
          • харе пугать - 32-bit Float 3.4028237 × 10^38
            Ответить
        • настоящие физики работают в планковской системе единиц
          Ответить
          • а я не физик - я программист
            Ответить
            • ФИЗИК: А по-моему, ты джаваскриптер!
              (Программист не сказал больше ни слова и тяжело рухнул на пол.)
              Ответить
    • А дампик?
      Ответить
      • а открыть глазики и найти ссылку на дампик?
        Ответить
        • Не знаю про Бормондяшу, а у меня маска иногда на глаза налезает.
          в качестве защитной реакции
          Ответить
          • Мне не нравится Ваша ава; маска напоминает чашку лифчика.
            Ответить
            • Мне нравятся Ваши ассоциации
              А вдруг там под ней действительно сиська.
              Ответить
              • Ну как, кто-нибудь узнал, что под чашечкой?
                Ответить
                • Ничего. Всё вывалилось, так как дна нет, а верх запаян.
                  Ответить
                • 'Ну как, кто-нибудь узнал, что под чашечкой?'

                  Чаевые.
                  Ответить
                  • Никому не интересно, что "под чашечкой". Гораздо интереснее, по какому поводу ее надели и какие надежды тешат те, кто пытается нося маску защитить свое бренное тело от вторжения.
                    Ответить

    Добавить комментарий