Servo: Полностью реализовать WebGL 1.0

Созданный на 26 мар. 2016  ·  40Комментарии  ·  Источник: servo/servo

Предполагается, что это мета-ошибка.

Некоторые из оставшихся методов заблокированы на https://github.com/servo/servo/issues/5014 (те, которые получают ArrayBufferView или BufferDataSource и имеют переопределения), но некоторые другие могут быть реализовано без проблем.

Я постараюсь записать отдельные проблемы для каждого оставшегося недостатка, так как некоторые из них могут быть E-Easy .

Общая информация об ошибках WebGL

Нажмите, чтобы развернуть

Спецификация

Спецификация WebGL 1.0 находится здесь .

GLES 2.0 спецификации

WebGL основан на спецификации GLES 2.0, поэтому спецификация WebGL часто использует детали. Вы можете найти PDF версию здесь .

Текущий код

ДОМ

DOM-сторону кода WebGL можно найти в следующих файлах:

  • components/script/dom/webglrenderingcontext.rs
  • components/script/dom/webglactiveinfo.rs
  • components/script/dom/webglbuffer.rs
  • components/script/dom/webglcontextevent.rs
  • components/script/dom/webglframebuffer.rs
  • components/script/dom/webglobject.rs
  • components/script/dom/webglprogram.rs
  • components/script/dom/webglrenderbuffer.rs
  • components/script/dom/webglrenderingcontext.rs
  • components/script/dom/webglshader.rs
  • components/script/dom/webglshaderprecisionformat.rs
  • components/script/dom/webgltexture.rs
  • components/script/dom/webgluniformlocation.rs

WebGL поток

Поток WebGL - это поток, который получает сообщения WebGL от DOM и либо выполняет его, либо отправляет в серверную часть WebRender.

Вероятно, вам здесь ничего не нужно трогать, но если вы хотите взглянуть, файл:

  • components/canvas/webgl_paint_thread.rs

Определение, выполнение команд WebGL и другие типы

Остальные определения WebGL и реализации команд находятся в файле webgl.rs webrender_traits для совместного использования как Servo, так и WebRender.

Вы захотите взглянуть на определение WebGLCommand и на функцию apply .

Для активной работы с ним лучше всего использовать переопределение Cargo .

Обратите внимание, что WebGLCommand реэкспортируется из canvas_traits как CanvasWebGLMessage по устаревшим причинам (чтобы избежать лишних проблем с перебазированием, пока webrender еще не слился).

Отсутствуют проверки безопасности

  • [] Правильно внедрите «Включенные атрибуты вершин и проверку диапазона» (# 20599)
  • [] Убедитесь, что мы правильно реализуем все ограничения GLSL (# 20601)
  • [] Правильно реализовать «Полноту вложений фреймбуфера кубической карты» (# 20654)
  • [] Внедрить проверку WebGL на обратную связь (# 21288)
  • [] Правильно внедрите проверку трафарета (# 20555)
  • [] В некоторых случаях инициализируйте текстуры на прозрачный черный (# 21716)
  • [] Проверить источник передан в gl.shaderSource() (# 21754)

Ожидающие реализации

  • [] Поддержка параметра контекста WebGL antialiasing (# 21285)
  • [] Поддержка удаления и воссоздания контекстов WebGL (# 15266)
  • [] Реализовать сжатые текстуры в WebGL (# 20594)
  • [] Реализовать отрисовку холста WebGL в 2D-холсте (# 21556)
  • [] Реализовать ImageBitmap (# 20650)
  • [] При необходимости создавайте буфер рисования меньше запрошенного (# 21718)
  • [] Canvas WebGL масштабируется при переходе в полноэкранный режим (# 21290)
  • [] Правильная защита от переполнения в WebGLRenderingContext.bufferSubData (# 20558)

Другие ожидаемые вещи и улучшения

  • [] Украсть у Firefox информацию об устойчивости контекста WebGL (# 21144)
  • [] Правильная поддержка расширенного атрибута WebIDL [AllowShared] (# 20515)
  • [] Кешировать drawingBufferWidth / drawingBufferHeight в WebGLRenderingContext (# 20530)
  • [] Кешировать результат WebGLRenderingContext.getContextAttributes (# 20532)
  • [] Не выделять пустой буфер даром в WebGLRenderingContext.bufferData (# 20557)
  • [] Убрать косвенные ссылки для параметров текстуры WebGL (# 20596)
  • [] Очистите инфраструктуру расширений WebGL (# 20642)
  • [] Может быть, представить новый источник задач, специфичный для WebGL (# 20643)
  • [] Тесты Khronos для WebGL не должны использовать индекс в имени теста (# 20668)
  • [] [Throws] не применяется к перегрузке (# 20516)
  • [] Сбой при загрузке шейдера на html5test.com (# 21191)
  • [] Демонстрация воды WebGL ничего не отображает (# 21173)
  • [] Firefox сообщает о более высоких лимитах «максимальное количество различных векторов», «максимальный буфер цвета» и «максимальное количество комбинированных текстурных блоков», чем Servo (# 21172)
  • [] Изучение реальных приложений на основе WebGL (# 21151)
  • [] Создайте профилировщик WebGL (# 21150)

Готово

  • [x] Проверьте наличие недопустимых символов в расположении WebGL и именах атрибутов (# 21287)
  • [x] Проверить поведение WebGLRenderingContext.getProgramInfoLog (# 20561)
  • [x] handle_object_deletion может быть неправильным (# 21352)
  • [x] Очистить буфер кадра при инициализации и изменении размера холста WebGL (# 21475)
  • [x] Поддержка объединений как отличительного параметра WebIDL (# 20513)
  • [x] Реализовать ожидающую перегрузку texImage2D (# 10443)
  • [x] Реализовать copyTexImage2D (# 11147)
  • [x] Реализовать copyTexSubImage2D (# 11147)
  • [x] Реализовать detachShader (# 10215)
  • [x] Отделка агрегата (# 10212, # 10215)
  • [x] Промывка агрегата (# 10213, # 10215)
  • [x] Реализовать framebufferRenderbuffer (# 13639)
  • [x] Реализовать framebufferTexture2D (# 13639)
  • [x] Реализовать generateMipmap (# 10215)
  • [x] Реализовать getActiveAttrib (# 10379)
  • [x] Реализовать getActiveUniform (# 10397)
  • [x] Реализовать getAttachedShaders (# 20411)
  • [x] Реализовать getFramebufferAttachmentParameter (# 20317)
  • [x] Реализовать getProgramInfoLog (# 13199)
  • [x] Реализовать getRenderbufferParameter (# 20514)
  • [x] Реализовать getTexParameter (# 20144)
  • [x] Реализовать getShaderPrecisionFormat (# 16544)
  • [x] Реализовать getUniform (# 21202)
  • [x] Реализовать getVertexAttrib
  • [x] Реализовать getVertexAttribOffset (# 16893)
  • [x] Реализовать isBuffer (# 11357)
  • [x] Реализация isEnabled (# 13040)
  • [x] Реализовать isFramebuffer (# 11357)
  • [x] Реализовать isRenderBuffer (# 11357)
  • [x] Реализовать isShader (# 11072)
  • [x] Реализовать isTexture (# 11072)
  • [x] Реализовать readPixels (# 10668)
  • [x] Реализовать renderbufferStorage (# 13872)
  • [x] Реализовать sampleCoverage
  • [x] Реализовать stencilFunc (# 10659)
  • [x] Реализовать stencilFuncSeparate (# 10659)
  • [x] Реализовать stencilMask (# 10659)
  • [x] Реализовать stencilMaskSeparate (# 10659)
  • [x] Реализовать stencilOp (# 10659)
  • [x] Реализовать stencilOpSeparate (# 10659)
  • [x] Реализовать texSubImage2D (# 11168)
  • [x] Реализовать uniform1i (# 10417)
  • [x] Реализовать uniform1iv (# 10417)
  • [x] Реализовать uniform2f (# 10356)
  • [x] Реализовать uniform2fv (# 10417)
  • [x] Реализовать uniform2i (# 10417)
  • [x] Реализация uniform2iv (# 10417)
  • [x] Реализовать uniform3f (# 10417)
  • [x] Реализовать uniform3fv (# 10417)
  • [x] Реализация uniform3i (# 10417)
  • [x] Реализация uniform3iv (# 10417)
  • [x] Реализация uniform4i (# 10368)
  • [x] Реализация uniform4iv (# 10368)
  • [x] Реализовать uniformMatrix2fv (# 10671)
  • [x] Реализовать uniformMatrix3fv (# 10671)
  • [x] Реализовать uniformMatrix4fv (# 10671)
  • [x] Реализовать программу validateProgram (# 13199)
  • [x] Правильно проверьте лимит в WebGLRenderingContext.activeTexture (# 20531)
  • [x] Реализовать gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE) (# 20535)
  • [x] Реализовать gl.getParameter(gl.BLEND_COLOR) (# 20536)
  • [x] Реализовать gl.getParameter(gl.COLOR_CLEAR_VALUE) (# 20537)
  • [x] Реализовать gl.getParameter(gl.COLOR_WRITEMASK) (# 20538)
  • [x] Реализовать gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS) (# 20544)
  • [x] Реализуйте gl.getParameter(gl.DEPTH_RANGE) (# 20545)
  • [x] Реализовать gl.getParameter(gl.GENERATE_MIPMAP_HINT) (# 20546)
  • [x] Поддержка IMPLEMENTATION_COLOR_READ_FORMAT и IMPLEMENTATION_COLOR_READ_TYPE (# 20547)
  • [x] Поддержка MAX_FRAGMENT_UNIFORM_VECTORS и MAX_VERTEX_UNIFORM_VECTORS (# 20548)
  • [x] Реализовать gl.getParameter(gl.MAX_VARYING_VECTORS) (# 20549)
  • [x] Поддержка SCISSOR_TEST и SCISSOR_BOX (# 20551)
  • [x] Реализовать gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL) (# 20552)
  • [x] Реализуйте gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL) (# 20553)
  • [x] Реализовать gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL) (# 20554)
  • [x] Правильно внедрите WebGLRenderingContext.bindBuffer проверки (# 20556)
  • [x] Правильно внедрите проверки для gl.renderbufferStorage (# 20563)
  • [x] Проверить чеки в WebGLRenderingContext.getFramebufferAttachmentParameter (# 20593)
  • [x] Правильно проверьте аргумент WebGLRenderingContext.clear (# 20623)
  • [x] Проверьте, правильно ли мы привязываем GLclampf (# 20652)
  • [x] Вернуть правильные типы в gl.getParameter и друзьях (# 20655)
  • [x] Тщательно проверьте, что объекты WebGL передаются в правильный контекст WebGL (# 21133)
  • [x] Реализовать проверку псевдонима атрибутов в WebGL (# 21136)
  • [x] Исправлена ​​утечка неинициализированных данных из renderbufferStorage (# 13710).
  • [x] WebGLShader деструктор часто утверждает при закрытии страниц webgl (# 21177)
  • [x] Перепроверьте наши проверки, если на одной странице есть несколько WebGLRenderingContext s.
  • [x] Создать тесты для изменений в # 20598 (# 20607)
  • [x] Сделайте наши проверки строго типизированными (# 10693)
  • [x] Удаление косвенных ссылок для некоторых параметров WebGL (# 20550)
  • [x] Прекратить реэкспорт WebGLCommand как CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Обновите нашу угловую зависимость
  • [x] Протестируйте с помощью набора тестов на соответствие WebGL (# 10373)
  • [x] Обновите нашу интерпретацию спецификации, чтобы она соответствовала другим движкам браузера (# 8753).
  • [x] Кэш, в котором включены серверные возможности GL (# 20534)
  • [x] Удаление косвенных указаний для параметров программы WebGL (# 20560)
  • [x] Удаление косвенных указаний для параметров шейдера WebGL (# 20562).
  • [x] Проверить, правильно ли обновляется статус фреймбуфера в WebGL (# 20570)
  • [x] Кешируйте информацию, необходимую для gl.getActiveAttrib и gl.getActiveUniform (# 20600)
  • [x] Информация кеша, необходимая для gl.getVertexAttrib и gl.getVertexAttribOffset (# 20608)
  • [x] Пометить холст как грязный, только если фреймбуфер не привязан (# 21691)
  • [x] Проверить, не превышает ли размер буфера рендеринга максимальный размер буфера рендеринга (# 21485)
  • [x] gl-pointcoord.html ничего не рисует (# 21719)
  • [x] oes-texture-half-float.html вызывает панику с ошибкой GL при работе в режиме рабочего стола (# 21663)
  • [x] Реализовать проверку компонентов в методах Image2D (# 20595)
  • [x] Поддержка параметра контекста WebGL preserveDrawingBuffer (# 21132)
A-contenwebgl B-meta

Самый полезный комментарий

Я планирую попробовать glGetTexParameter.

Все 40 Комментарий

cc @dmarcos

Я буду работать над реализацией generateMipmap

@ConnorGBrewster Я открыл https://github.com/servo/servo/issues/10226, давайте там обсудим :)

Я бы хотел поработать над getActiveUniform

@saurvs Я открыл для вас https://github.com/servo/servo/issues/10397, не стесняйтесь задавать любые вопросы, которые могут у вас там возникнуть :)

Я бы хотел поработать над всеми оставшимися единообразными методами, если можно

@autrilla Они твои! Я открыл https://github.com/servo/servo/issues/10417, чтобы отслеживать их, не стесняйтесь оставлять там любые вопросы :)

Я смотрю на функции трафарета *.

Я пробую в copyTex* и texSubImage2D

Попытка

Implement isShader
Implement isTexture

Я бы хотел помочь texSubImage2D

@daoshengmu : звучит здорово!

@danlrobertson , вы все еще работаете над texSubImage2D ?

@danlrobertson Извините за то, что не заметил, что вы работаете над texSubImage2D . Я просто хочу помочь в реализации WebGL. Если вы все еще работаете над этим, я могу выбрать copyTexImage2D и copyTexSubImage2D @emilio

@daoshengmu Нет проблем! Это нормально! Плохо то, что столько времени занимает пиарщик, но, увы, жизнь бывает: smile: ...

Вы согласны взять texSubImage2D ? Я уже реализовал необходимые компоненты в wr_traits . Вскоре у меня должен быть PR для copyTex* , но на самом деле я еще не начал с texSubImage2D . Если вы хотите texSubImage2D , дерзайте! У меня нет к нему особой привязанности. Просто хотел немного узнать о коде webgl ...

@danlrobertson Конечно. Я возьму texSubImage2D . Спасибо! 😄

Если все в порядке, я буду работать над
Implement isFramebuffer
а также
Implement isRenderBuffer

@DDEFISHER дерзай ! Не могли бы вы открыть для них вопрос, чтобы я мог вас туда назначить?

Я собираюсь также поработать над isBuffer так как он похож на другие 2

Пожалуйста, оставьте здесь комментарий, если вы собираетесь работать над этой проблемой. Спасибо!

Отдельные вопросы для отдельных API - это материал E-easy; не этот.

Может ли кто-нибудь указать на реализацию E-easy (ish), над которой я могу работать? Спасибо :)

@ofekd isEnabled может быть хорошим выбором, поскольку enable и disable уже реализованы!

@jdm я возьму

@ofekd isEnabled может быть сложной webgl-specific.html , такие как функции смешивания или функции трафарета, должны быть действительно хорошими отправными точками. invalid-passed-params.html вероятно, тоже имеет хорошие простые задачи.

@anholt Если это не слишком сложно, я не против еще немного поработать. Я еще не начал над этим работать, но для начала, похоже, мне нужно изменить:

webrender_traits/src/webgl.rs
servo/components/script/dom/webglrenderingcontext.rs
servo/components/script/dom/webidls/WebGLRenderingContext.webidl

Если это как-то не мешает другим усилиям, я бы продолжил работу над isEnabled

Я буду работать над реализацией validateProgram и getProgramInfoLog

Я буду работать с uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv и framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage.

Я собираюсь запустить более требовательные демонстрации webgl и измерить производительность сервопривода, и мне нужны эти функции;)

@MortimerGoro Я работал над поддержкой FBO (см. Пару недавних слияний и https://github.com/anholt/servo/tree/webgl-fbo). Я также собрал https://github.com/anholt/servo/tree/webgl-uniform-matrix-v для uniformmatrix, но тестирование необходимо отладить.

@anholt круто ! Вам нужна помощь с тестированием однородной матрицы?

@MortimerGoro просто выясняет, что происходит, с ненадежными результатами.

Я открыл # 13639 для отслеживания поддержки FBO. Хотите добавить это в framebufferRenderbuffer / framebufferTexture2D?

@ shravan-achar, возможно, будет интересно поработать здесь над остальными.

Похоже, что неправильное использование toDataURL() для WebGL является причиной целого ряда оставшихся проблем с тестовым набором (например, asin_001_to_006.html )

Только 5 недостающих API сейчас.

я, @ taki -jaro, @xanewok будут работать над этим вопросом в качестве студенческого проекта.
cc @KiChjang

Я планирую попробовать glGetTexParameter.

Работаем над getFramebufferAttachmentParameter() .

Я бы хотел сделать getRenderbufferParameter

По какой-то причине эта проблема больше не регистрирует изменения.

Изменить: похоже, сейчас работает.

Я добавил кучу проблем.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги