Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
webgl: bufferData congela mi aplicación, cómo hacerlo de forma asíncrona

Estoy trabajando en una generación y simulación de un mundo web 2d. Genero un terreno 2d (diferentes formas y colores de celdas) usando ruido perlin y alguna función aleatoria en diferentes trabajadores web. Esos trabajadores alimentan un caché que contiene los diferentes fragmentos y sus datos. Cuando un fragmento recibe datos de su trabajador, actualiza automáticamente su búfer:

 (chunk) => { this.webgl.bindBuffer(this.webgl.ARRAY_BUFFER, chunk.vertexBuffer); this.webgl.bufferData(this.webgl.ARRAY_BUFFER, chunk.vertexes, this.webgl.STATIC_DRAW); this.webgl.bindBuffer(this.webgl.ARRAY_BUFFER, chunk.colorBuffer); this.webgl.bufferData(this.webgl.ARRAY_BUFFER, chunk.colors, this.webgl.STATIC_DRAW); }

También tengo una especie de bucle de juego que se llama a sí mismo en cada requestAnimationFrame y dibuja su parte.

 cache.forEachChunk(center.current, scale.current, (chunk) => { gl.bindBuffer(gl.ARRAY_BUFFER, chunk.colorBuffer); const fillColor = gl.getAttribLocation(shaderProgram, "fillColor"); gl.enableVertexAttribArray(fillColor); gl.vertexAttribPointer(fillColor, 3, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, chunk.vertexBuffer); const position = gl.getAttribLocation(shaderProgram, "position"); gl.enableVertexAttribArray(position); gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0); if (chunk.vertexes) gl.drawArrays(gl.TRIANGLES, 0, chunk.vertexes.length / 2); })

Esto funciona muy bien... excepto que se congela un poco cada vez que un fragmento recibe datos de sus trabajadores: de hecho, llamar a bufferData es bastante lento pero, sobre todo, bloquea mi aplicación. ¿Hay alguna forma de hacer esto en un trabajador web o alguna otra estrategia para poder enviar datos a mi tarjeta gráfica sin bloquear toda mi aplicación? Bloquearlo no tiene sentido: la tarjeta gráfica aún debería poder dibujar los otros fragmentos sin preocupaciones.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

bufferData crea un almacén de datos completamente nuevo. Piense en ello como asignación e inicialización de búfer. Si solo desea actualizar un búfer existente, use bufferSubData (consulte tambiénObjetos de búfer ). bufferSubData simplemente escribe los datos en un búfer existente sin volver a crear el almacén de datos, por lo que es mucho más rápido. Por supuesto, bufferSubData no puede cambiar el tamaño de la memoria de datos y debe "asignar" el búfer una vez con bufferData . Sin embargo, no es necesario pasar datos al búfer cuando lo inicializa. Esto significa que el argumento de datos de bufferData puede ser null .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!