2014-10-01 3 views
1

У меня есть два шейдера, которые используют разные вертексеры и разные одинаковые значения, но используют ту же текстуру (spritesheet/atlas). возможно ли, чтобы они делили одну и ту же текстуру (не заставляя текстуру дважды посылать в gpu)?webgl: доля текстуры с другой программой/шейдером

background: В моей игре есть серьезные проблемы с производительностью на моем ноутбуке, и они, похоже, связаны с gpu. Моя текущая реализация использует два холста, один для моего фона и один для моего переднего плана. они затем скомпонованы для окончательного изображения (рисуются на 3-м холсте). В моем фоновом режиме используются 4 текстуры, тогда как на моем переднем плане есть один большой спрайт. на переднем плане и в фоновом режиме используется только один вызов вызова.

Я надеюсь улучшить производительность, рисуя все на один холст, а также объединяя все текстуры в один спрайт. его абсолютно возможно это не приведет к улучшению. мой фон использует шум для смешивания текстур, и очень возможно, что основной проблемой является сложность шейдера.

ответ

4

возможно для них одни и те же текстуры (не вызывая текстуры для отправки в ОГПУ дважды

Да

текселя отправляются только на GPU при вызове gl.texImage2D или gl.texSubImage2D.

наиболее распространенной формой установки программы WebGL является

т Init время

  • Создание/компиляции/сборки программ
  • Создать/Загрузить Буферы (Vertex Data)
  • Создать/Загрузить Textures

время рендеринга

  • Использование программы
  • Атрибуты установки
  • форменных установки и Bind текстура
  • Draw

Для текстур "в инициализации времени части" обычно означает вызов

gl.createTexture // to create a teture 
gl.bindTexture // to assign the texture so follow commands will affect it. 
gl.texImage2D  // to upload data 
gl.texParameteri // to set filtering 
gl.generateMipmap // if you need mips 

Во время выполнения

gl.activeTexture // to choose a texture unit 
gl.bindTexture // to assign an existing texture to the active texture unit 
gl.uniform1i  // to tell the shader which unit to use for a specific sampler 

Насколько расчесывать ваши текстуры Да, это, скорее всего, заставит вашу программу работать быстрее. Это происходит не потому, что вы загружаете текстуры меньше, хотя это потому, что вы можете рисовать больше вещей с меньшим количеством вызовов. See the cube example near the bottom of this article.

+0

спасибо gman, мне удалось заставить его работать! Большое объяснение сделало многое для меня намного более ясным. – marcgfx

Смежные вопросы