@zephyr3d/editor 0.3.4 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/assets/{index-DzQzWsCG.js → index-ySiLtSxz.js} +3 -3
  2. package/dist/assistant/zephyr-types-index.json +14217 -7895
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  5. package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
  6. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  7. package/dist/modules/zephyr3d_device.js +15 -15
  8. package/dist/modules/zephyr3d_device.js.map +1 -1
  9. package/dist/modules/zephyr3d_imgui.js.map +1 -1
  10. package/dist/modules/zephyr3d_scene.js +3276 -1089
  11. package/dist/modules/zephyr3d_scene.js.map +1 -1
  12. package/dist/vendor/zephyr3d/backend-webgl/dist/index.js.map +1 -1
  13. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
  14. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  15. package/dist/vendor/zephyr3d/backend-webgpu/dist/index.js.map +1 -1
  16. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  18. package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
  19. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  20. package/dist/vendor/zephyr3d/imgui/dist/index.d.ts +7 -0
  21. package/dist/vendor/zephyr3d/imgui/dist/index.js.map +1 -1
  22. package/dist/vendor/zephyr3d/scene/dist/animation/animation.js +87 -0
  23. package/dist/vendor/zephyr3d/scene/dist/animation/animation.js.map +1 -1
  24. package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js +503 -0
  25. package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js.map +1 -0
  26. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +686 -63
  27. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  28. package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js +974 -0
  29. package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js.map +1 -0
  30. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
  31. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
  32. package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
  33. package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
  34. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +17 -12
  35. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
  36. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +2 -1
  37. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
  39. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
  40. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
  41. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1271 -10
  43. package/dist/vendor/zephyr3d/scene/dist/index.js +3 -1
  44. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  46. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js +7 -3
  48. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
  50. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
  52. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
  53. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
  54. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
  55. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
  56. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
  57. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
  58. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
  59. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
  60. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
  61. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
  62. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
  63. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
  64. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
  65. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +276 -275
  66. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  67. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +4 -3
  68. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  69. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +1 -1
  70. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  71. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  72. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +3 -2
  73. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
  74. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
  75. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"zephyr3d_backend-webgl.js","sources":["../../../../libs/backend-webgl/src/webgl_enum.ts","../../../../libs/backend-webgl/src/utils.ts","../../../../libs/backend-webgl/src/constants_webgl.ts","../../../../libs/backend-webgl/src/gpuobject_webgl.ts","../../../../libs/backend-webgl/src/basetexture_webgl.ts","../../../../libs/backend-webgl/src/texture2d_webgl.ts","../../../../libs/backend-webgl/src/texture2darray_webgl.ts","../../../../libs/backend-webgl/src/texture3d_webgl.ts","../../../../libs/backend-webgl/src/texturecube_webgl.ts","../../../../libs/backend-webgl/src/texturevideo_webgl.ts","../../../../libs/backend-webgl/src/vertexlayout_webgl.ts","../../../../libs/backend-webgl/src/buffer_webgl.ts","../../../../libs/backend-webgl/src/indexbuffer_webgl.ts","../../../../libs/backend-webgl/src/framebuffer_webgl.ts","../../../../libs/backend-webgl/src/renderstate_webgl.ts","../../../../libs/backend-webgl/src/gpu_timer.ts","../../../../libs/backend-webgl/src/capabilities_webgl.ts","../../../../libs/backend-webgl/src/structuredbuffer_webgl.ts","../../../../libs/backend-webgl/src/bindgroup_webgl.ts","../../../../libs/backend-webgl/src/gpuprogram_webgl.ts","../../../../libs/backend-webgl/src/sampler_webgl.ts","../../../../libs/backend-webgl/src/sampler_cache.ts","../../../../libs/backend-webgl/src/device_webgl.ts","../../../../libs/backend-webgl/src/index.ts"],"sourcesContent":["/**\r\n * WebGL constant value definitions\r\n */\r\n\r\nexport enum WebGLEnum {\r\n READ_BUFFER = 0xc02,\r\n UNPACK_ROW_LENGTH = 0xcf2,\r\n UNPACK_SKIP_ROWS = 0xcf3,\r\n UNPACK_SKIP_PIXELS = 0xcf4,\r\n PACK_ROW_LENGTH = 0xd02,\r\n PACK_SKIP_ROWS = 0xd03,\r\n PACK_SKIP_PIXELS = 0xd04,\r\n COLOR = 0x1800,\r\n DEPTH = 0x1801,\r\n STENCIL = 0x1802,\r\n RED = 0x1903,\r\n RGB8 = 0x8051,\r\n RGBA8 = 0x8058,\r\n RGB10_A2 = 0x8059,\r\n TEXTURE_BINDING_3D = 0x806a,\r\n UNPACK_SKIP_IMAGES = 0x806d,\r\n UNPACK_IMAGE_HEIGHT = 0x806e,\r\n TEXTURE_3D = 0x806f,\r\n TEXTURE_WRAP_R = 0x8072,\r\n MAX_3D_TEXTURE_SIZE = 0x8073,\r\n UNSIGNED_INT_2_10_10_10_REV = 0x8368,\r\n MAX_ELEMENTS_VERTICES = 0x80e8,\r\n MAX_ELEMENTS_INDICES = 0x80e9,\r\n TEXTURE_MIN_LOD = 0x813a,\r\n TEXTURE_MAX_LOD = 0x813b,\r\n TEXTURE_BASE_LEVEL = 0x813c,\r\n TEXTURE_MAX_LEVEL = 0x813d,\r\n MIN = 0x8007,\r\n MAX = 0x8008,\r\n DEPTH_COMPONENT24 = 0x81a6,\r\n MAX_TEXTURE_LOD_BIAS = 0x84fd,\r\n TEXTURE_COMPARE_MODE = 0x884c,\r\n TEXTURE_COMPARE_FUNC = 0x884d,\r\n CURRENT_QUERY = 0x8865,\r\n QUERY_RESULT = 0x8866,\r\n QUERY_RESULT_AVAILABLE = 0x8867,\r\n STREAM_READ = 0x88e1,\r\n STREAM_COPY = 0x88e2,\r\n STATIC_READ = 0x88e5,\r\n STATIC_COPY = 0x88e6,\r\n DYNAMIC_READ = 0x88e9,\r\n DYNAMIC_COPY = 0x88ea,\r\n MAX_DRAW_BUFFERS = 0x8824,\r\n DRAW_BUFFER0 = 0x8825,\r\n DRAW_BUFFER1 = 0x8826,\r\n DRAW_BUFFER2 = 0x8827,\r\n DRAW_BUFFER3 = 0x8828,\r\n DRAW_BUFFER4 = 0x8829,\r\n DRAW_BUFFER5 = 0x882a,\r\n DRAW_BUFFER6 = 0x882b,\r\n DRAW_BUFFER7 = 0x882c,\r\n DRAW_BUFFER8 = 0x882d,\r\n DRAW_BUFFER9 = 0x882e,\r\n DRAW_BUFFER10 = 0x882f,\r\n DRAW_BUFFER11 = 0x8830,\r\n DRAW_BUFFER12 = 0x8831,\r\n DRAW_BUFFER13 = 0x8832,\r\n DRAW_BUFFER14 = 0x8833,\r\n DRAW_BUFFER15 = 0x8834,\r\n MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8b49,\r\n MAX_VERTEX_UNIFORM_COMPONENTS = 0x8b4a,\r\n SAMPLER_3D = 0x8b5f,\r\n SAMPLER_2D_SHADOW = 0x8b62,\r\n FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b,\r\n PIXEL_PACK_BUFFER = 0x88eb,\r\n PIXEL_UNPACK_BUFFER = 0x88ec,\r\n PIXEL_PACK_BUFFER_BINDING = 0x88ed,\r\n PIXEL_UNPACK_BUFFER_BINDING = 0x88ef,\r\n FLOAT_MAT2x3 = 0x8b65,\r\n FLOAT_MAT2x4 = 0x8b66,\r\n FLOAT_MAT3x2 = 0x8b67,\r\n FLOAT_MAT3x4 = 0x8b68,\r\n FLOAT_MAT4x2 = 0x8b69,\r\n FLOAT_MAT4x3 = 0x8b6a,\r\n SRGB = 0x8c40,\r\n SRGB8 = 0x8c41,\r\n SRGB_ALPHA = 0x8c42,\r\n SRGB8_ALPHA8 = 0x8c43,\r\n COMPARE_REF_TO_TEXTURE = 0x884e,\r\n RGBA32F = 0x8814,\r\n RGB32F = 0x8815,\r\n RGBA16F = 0x881a,\r\n RGB16F = 0x881b,\r\n VERTEX_ATTRIB_ARRAY_INTEGER = 0x88fd,\r\n MAX_ARRAY_TEXTURE_LAYERS = 0x88ff,\r\n MIN_PROGRAM_TEXEL_OFFSET = 0x8904,\r\n MAX_PROGRAM_TEXEL_OFFSET = 0x8905,\r\n MAX_VARYING_COMPONENTS = 0x8b4b,\r\n TEXTURE_2D_ARRAY = 0x8c1a,\r\n TEXTURE_BINDING_2D_ARRAY = 0x8c1d,\r\n R11F_G11F_B10F = 0x8c3a,\r\n UNSIGNED_INT_10F_11F_11F_REV = 0x8c3b,\r\n RGB9_E5 = 0x8c3d,\r\n UNSIGNED_INT_5_9_9_9_REV = 0x8c3e,\r\n TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8c7f,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8c80,\r\n TRANSFORM_FEEDBACK_VARYINGS = 0x8c83,\r\n TRANSFORM_FEEDBACK_BUFFER_START = 0x8c84,\r\n TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8c85,\r\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88,\r\n RASTERIZER_DISCARD = 0x8c89,\r\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8c8a,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8c8b,\r\n INTERLEAVED_ATTRIBS = 0x8c8c,\r\n SEPARATE_ATTRIBS = 0x8c8d,\r\n TRANSFORM_FEEDBACK_BUFFER = 0x8c8e,\r\n TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8c8f,\r\n RGBA32UI = 0x8d70,\r\n RGB32UI = 0x8d71,\r\n RGBA16UI = 0x8d76,\r\n RGB16UI = 0x8d77,\r\n RGBA8UI = 0x8d7c,\r\n RGB8UI = 0x8d7d,\r\n RGBA32I = 0x8d82,\r\n RGB32I = 0x8d83,\r\n RGBA16I = 0x8d88,\r\n RGB16I = 0x8d89,\r\n RGBA8I = 0x8d8e,\r\n RGB8I = 0x8d8f,\r\n RED_INTEGER = 0x8d94,\r\n RGB_INTEGER = 0x8d98,\r\n RGBA_INTEGER = 0x8d99,\r\n SAMPLER_2D_ARRAY = 0x8dc1,\r\n SAMPLER_2D_ARRAY_SHADOW = 0x8dc4,\r\n SAMPLER_CUBE_SHADOW = 0x8dc5,\r\n UNSIGNED_INT_VEC2 = 0x8dc6,\r\n UNSIGNED_INT_VEC3 = 0x8dc7,\r\n UNSIGNED_INT_VEC4 = 0x8dc8,\r\n INT_SAMPLER_2D = 0x8dca,\r\n INT_SAMPLER_3D = 0x8dcb,\r\n INT_SAMPLER_CUBE = 0x8dcc,\r\n INT_SAMPLER_2D_ARRAY = 0x8dcf,\r\n UNSIGNED_INT_SAMPLER_2D = 0x8dd2,\r\n UNSIGNED_INT_SAMPLER_3D = 0x8dd3,\r\n UNSIGNED_INT_SAMPLER_CUBE = 0x8dd4,\r\n UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8dd7,\r\n DEPTH_COMPONENT32F = 0x8cac,\r\n DEPTH32F_STENCIL8 = 0x8cad,\r\n FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8dad,\r\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210,\r\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211,\r\n FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212,\r\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213,\r\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214,\r\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215,\r\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216,\r\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217,\r\n FRAMEBUFFER_DEFAULT = 0x8218,\r\n UNSIGNED_INT_24_8 = 0x84fa,\r\n DEPTH24_STENCIL8 = 0x88f0,\r\n UNSIGNED_NORMALIZED = 0x8c17,\r\n DRAW_FRAMEBUFFER_BINDING = 0x8ca6,\r\n READ_FRAMEBUFFER = 0x8ca8,\r\n DRAW_FRAMEBUFFER = 0x8ca9,\r\n READ_FRAMEBUFFER_BINDING = 0x8caa,\r\n RENDERBUFFER_SAMPLES = 0x8cab,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8cd4,\r\n MAX_COLOR_ATTACHMENTS = 0x8cdf,\r\n COLOR_ATTACHMENT1 = 0x8ce1,\r\n COLOR_ATTACHMENT2 = 0x8ce2,\r\n COLOR_ATTACHMENT3 = 0x8ce3,\r\n COLOR_ATTACHMENT4 = 0x8ce4,\r\n COLOR_ATTACHMENT5 = 0x8ce5,\r\n COLOR_ATTACHMENT6 = 0x8ce6,\r\n COLOR_ATTACHMENT7 = 0x8ce7,\r\n COLOR_ATTACHMENT8 = 0x8ce8,\r\n COLOR_ATTACHMENT9 = 0x8ce9,\r\n COLOR_ATTACHMENT10 = 0x8cea,\r\n COLOR_ATTACHMENT11 = 0x8ceb,\r\n COLOR_ATTACHMENT12 = 0x8cec,\r\n COLOR_ATTACHMENT13 = 0x8ced,\r\n COLOR_ATTACHMENT14 = 0x8cee,\r\n COLOR_ATTACHMENT15 = 0x8cef,\r\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8d56,\r\n MAX_SAMPLES = 0x8d57,\r\n HALF_FLOAT = 0x8d61,\r\n RG = 0x8227,\r\n RG_INTEGER = 0x8228,\r\n R8 = 0x8229,\r\n RG8 = 0x822b,\r\n R16F = 0x822d,\r\n R32F = 0x822e,\r\n RG16F = 0x822f,\r\n RG32F = 0x8230,\r\n R8I = 0x8231,\r\n R8UI = 0x8232,\r\n R16I = 0x8233,\r\n R16UI = 0x8234,\r\n R32I = 0x8235,\r\n R32UI = 0x8236,\r\n RG8I = 0x8237,\r\n RG8UI = 0x8238,\r\n RG16I = 0x8239,\r\n RG16UI = 0x823a,\r\n RG32I = 0x823b,\r\n RG32UI = 0x823c,\r\n VERTEX_ARRAY_BINDING = 0x85b5,\r\n R8_SNORM = 0x8f94,\r\n RG8_SNORM = 0x8f95,\r\n RGB8_SNORM = 0x8f96,\r\n RGBA8_SNORM = 0x8f97,\r\n SIGNED_NORMALIZED = 0x8f9c,\r\n COPY_READ_BUFFER = 0x8f36,\r\n COPY_WRITE_BUFFER = 0x8f37,\r\n COPY_READ_BUFFER_BINDING = 0x8f36,\r\n COPY_WRITE_BUFFER_BINDING = 0x8f37,\r\n UNIFORM_BUFFER = 0x8a11,\r\n UNIFORM_BUFFER_BINDING = 0x8a28,\r\n UNIFORM_BUFFER_START = 0x8a29,\r\n UNIFORM_BUFFER_SIZE = 0x8a2a,\r\n MAX_VERTEX_UNIFORM_BLOCKS = 0x8a2b,\r\n MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8a2d,\r\n MAX_COMBINED_UNIFORM_BLOCKS = 0x8a2e,\r\n MAX_UNIFORM_BUFFER_BINDINGS = 0x8a2f,\r\n MAX_UNIFORM_BLOCK_SIZE = 0x8a30,\r\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8a31,\r\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8a33,\r\n UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8a34,\r\n ACTIVE_UNIFORM_BLOCKS = 0x8a36,\r\n UNIFORM_TYPE = 0x8a37,\r\n UNIFORM_SIZE = 0x8a38,\r\n UNIFORM_BLOCK_INDEX = 0x8a3a,\r\n UNIFORM_OFFSET = 0x8a3b,\r\n UNIFORM_ARRAY_STRIDE = 0x8a3c,\r\n UNIFORM_MATRIX_STRIDE = 0x8a3d,\r\n UNIFORM_IS_ROW_MAJOR = 0x8a3e,\r\n UNIFORM_BLOCK_BINDING = 0x8a3f,\r\n UNIFORM_BLOCK_DATA_SIZE = 0x8a40,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8a42,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8a43,\r\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8a44,\r\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8a46,\r\n INVALID_INDEX = 0xffffffff,\r\n MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122,\r\n MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125,\r\n MAX_SERVER_WAIT_TIMEOUT = 0x9111,\r\n OBJECT_TYPE = 0x9112,\r\n SYNC_CONDITION = 0x9113,\r\n SYNC_STATUS = 0x9114,\r\n SYNC_FLAGS = 0x9115,\r\n SYNC_FENCE = 0x9116,\r\n SYNC_GPU_COMMANDS_COMPLETE = 0x9117,\r\n UNSIGNALED = 0x9118,\r\n SIGNALED = 0x9119,\r\n ALREADY_SIGNALED = 0x911a,\r\n TIMEOUT_EXPIRED = 0x911b,\r\n CONDITION_SATISFIED = 0x911c,\r\n WAIT_FAILED = 0x911d,\r\n SYNC_FLUSH_COMMANDS_BIT = 0x1,\r\n VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88fe,\r\n ANY_SAMPLES_PASSED = 0x8c2f,\r\n ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a,\r\n SAMPLER_BINDING = 0x8919,\r\n RGB10_A2UI = 0x906f,\r\n INT_2_10_10_10_REV = 0x8d9f,\r\n TRANSFORM_FEEDBACK = 0x8e22,\r\n TRANSFORM_FEEDBACK_PAUSED = 0x8e23,\r\n TRANSFORM_FEEDBACK_ACTIVE = 0x8e24,\r\n TRANSFORM_FEEDBACK_BINDING = 0x8e25,\r\n TEXTURE_IMMUTABLE_FORMAT = 0x912f,\r\n MAX_ELEMENT_INDEX = 0x8d6b,\r\n TEXTURE_IMMUTABLE_LEVELS = 0x82df,\r\n MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247,\r\n DEPTH_BUFFER_BIT = 0x100,\r\n STENCIL_BUFFER_BIT = 0x400,\r\n COLOR_BUFFER_BIT = 0x4000,\r\n POINTS = 0x0,\r\n LINES = 0x1,\r\n LINE_LOOP = 0x2,\r\n LINE_STRIP = 0x3,\r\n TRIANGLES = 0x4,\r\n TRIANGLE_STRIP = 0x5,\r\n TRIANGLE_FAN = 0x6,\r\n ZERO = 0x0,\r\n ONE = 0x1,\r\n SRC_COLOR = 0x300,\r\n ONE_MINUS_SRC_COLOR = 0x301,\r\n SRC_ALPHA = 0x302,\r\n ONE_MINUS_SRC_ALPHA = 0x303,\r\n DST_ALPHA = 0x304,\r\n ONE_MINUS_DST_ALPHA = 0x305,\r\n DST_COLOR = 0x306,\r\n ONE_MINUS_DST_COLOR = 0x307,\r\n SRC_ALPHA_SATURATE = 0x308,\r\n FUNC_ADD = 0x8006,\r\n FUNC_MIN = 0x8007,\r\n FUNC_MAX = 0x8008,\r\n BLEND_EQUATION = 0x8009,\r\n BLEND_EQUATION_RGB = 0x8009,\r\n BLEND_EQUATION_ALPHA = 0x883d,\r\n FUNC_SUBTRACT = 0x800a,\r\n FUNC_REVERSE_SUBTRACT = 0x800b,\r\n BLEND_DST_RGB = 0x80c8,\r\n BLEND_SRC_RGB = 0x80c9,\r\n BLEND_DST_ALPHA = 0x80ca,\r\n BLEND_SRC_ALPHA = 0x80cb,\r\n CONSTANT_COLOR = 0x8001,\r\n ONE_MINUS_CONSTANT_COLOR = 0x8002,\r\n CONSTANT_ALPHA = 0x8003,\r\n ONE_MINUS_CONSTANT_ALPHA = 0x8004,\r\n BLEND_COLOR = 0x8005,\r\n ARRAY_BUFFER = 0x8892,\r\n ELEMENT_ARRAY_BUFFER = 0x8893,\r\n ARRAY_BUFFER_BINDING = 0x8894,\r\n ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,\r\n STREAM_DRAW = 0x88e0,\r\n STATIC_DRAW = 0x88e4,\r\n DYNAMIC_DRAW = 0x88e8,\r\n BUFFER_SIZE = 0x8764,\r\n BUFFER_USAGE = 0x8765,\r\n CURRENT_VERTEX_ATTRIB = 0x8626,\r\n FRONT = 0x404,\r\n BACK = 0x405,\r\n FRONT_AND_BACK = 0x408,\r\n TEXTURE_2D = 0xde1,\r\n CULL_FACE = 0xb44,\r\n BLEND = 0xbe2,\r\n DITHER = 0xbd0,\r\n STENCIL_TEST = 0xb90,\r\n DEPTH_TEST = 0xb71,\r\n SCISSOR_TEST = 0xc11,\r\n POLYGON_OFFSET_FILL = 0x8037,\r\n SAMPLE_ALPHA_TO_COVERAGE = 0x809e,\r\n SAMPLE_COVERAGE = 0x80a0,\r\n NO_ERROR = 0x0,\r\n INVALID_ENUM = 0x500,\r\n INVALID_VALUE = 0x501,\r\n INVALID_OPERATION = 0x502,\r\n OUT_OF_MEMORY = 0x505,\r\n CW = 0x900,\r\n CCW = 0x901,\r\n LINE_WIDTH = 0xb21,\r\n ALIASED_POINT_SIZE_RANGE = 0x846d,\r\n ALIASED_LINE_WIDTH_RANGE = 0x846e,\r\n CULL_FACE_MODE = 0xb45,\r\n FRONT_FACE = 0xb46,\r\n DEPTH_RANGE = 0xb70,\r\n DEPTH_WRITEMASK = 0xb72,\r\n DEPTH_CLEAR_VALUE = 0xb73,\r\n DEPTH_FUNC = 0xb74,\r\n STENCIL_CLEAR_VALUE = 0xb91,\r\n STENCIL_FUNC = 0xb92,\r\n STENCIL_FAIL = 0xb94,\r\n STENCIL_PASS_DEPTH_FAIL = 0xb95,\r\n STENCIL_PASS_DEPTH_PASS = 0xb96,\r\n STENCIL_REF = 0xb97,\r\n STENCIL_VALUE_MASK = 0xb93,\r\n STENCIL_WRITEMASK = 0xb98,\r\n STENCIL_BACK_FUNC = 0x8800,\r\n STENCIL_BACK_FAIL = 0x8801,\r\n STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,\r\n STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,\r\n STENCIL_BACK_REF = 0x8ca3,\r\n STENCIL_BACK_VALUE_MASK = 0x8ca4,\r\n STENCIL_BACK_WRITEMASK = 0x8ca5,\r\n VIEWPORT = 0xba2,\r\n SCISSOR_BOX = 0xc10,\r\n COLOR_CLEAR_VALUE = 0xc22,\r\n COLOR_WRITEMASK = 0xc23,\r\n UNPACK_ALIGNMENT = 0xcf5,\r\n PACK_ALIGNMENT = 0xd05,\r\n MAX_TEXTURE_SIZE = 0xd33,\r\n MAX_VIEWPORT_DIMS = 0xd3a,\r\n SUBPIXEL_BITS = 0xd50,\r\n RED_BITS = 0xd52,\r\n GREEN_BITS = 0xd53,\r\n BLUE_BITS = 0xd54,\r\n ALPHA_BITS = 0xd55,\r\n DEPTH_BITS = 0xd56,\r\n STENCIL_BITS = 0xd57,\r\n POLYGON_OFFSET_UNITS = 0x2a00,\r\n POLYGON_OFFSET_FACTOR = 0x8038,\r\n TEXTURE_BINDING_2D = 0x8069,\r\n SAMPLE_BUFFERS = 0x80a8,\r\n SAMPLES = 0x80a9,\r\n SAMPLE_COVERAGE_VALUE = 0x80aa,\r\n SAMPLE_COVERAGE_INVERT = 0x80ab,\r\n COMPRESSED_TEXTURE_FORMATS = 0x86a3,\r\n DONT_CARE = 0x1100,\r\n FASTEST = 0x1101,\r\n NICEST = 0x1102,\r\n GENERATE_MIPMAP_HINT = 0x8192,\r\n BYTE = 0x1400,\r\n UNSIGNED_BYTE = 0x1401,\r\n SHORT = 0x1402,\r\n UNSIGNED_SHORT = 0x1403,\r\n INT = 0x1404,\r\n UNSIGNED_INT = 0x1405,\r\n FLOAT = 0x1406,\r\n DEPTH_COMPONENT = 0x1902,\r\n ALPHA = 0x1906,\r\n RGB = 0x1907,\r\n RGBA = 0x1908,\r\n LUMINANCE = 0x1909,\r\n LUMINANCE_ALPHA = 0x190a,\r\n UNSIGNED_SHORT_4_4_4_4 = 0x8033,\r\n UNSIGNED_SHORT_5_5_5_1 = 0x8034,\r\n UNSIGNED_SHORT_5_6_5 = 0x8363,\r\n FRAGMENT_SHADER = 0x8b30,\r\n VERTEX_SHADER = 0x8b31,\r\n MAX_VERTEX_ATTRIBS = 0x8869,\r\n MAX_VERTEX_UNIFORM_VECTORS = 0x8dfb,\r\n MAX_VARYING_VECTORS = 0x8dfc,\r\n MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8b4d,\r\n MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8b4c,\r\n MAX_TEXTURE_IMAGE_UNITS = 0x8872,\r\n MAX_FRAGMENT_UNIFORM_VECTORS = 0x8dfd,\r\n SHADER_TYPE = 0x8b4f,\r\n DELETE_STATUS = 0x8b80,\r\n LINK_STATUS = 0x8b82,\r\n VALIDATE_STATUS = 0x8b83,\r\n ATTACHED_SHADERS = 0x8b85,\r\n ACTIVE_UNIFORMS = 0x8b86,\r\n ACTIVE_ATTRIBUTES = 0x8b89,\r\n SHADING_LANGUAGE_VERSION = 0x8b8c,\r\n CURRENT_PROGRAM = 0x8b8d,\r\n NEVER = 0x200,\r\n LESS = 0x201,\r\n EQUAL = 0x202,\r\n LEQUAL = 0x203,\r\n GREATER = 0x204,\r\n NOTEQUAL = 0x205,\r\n GEQUAL = 0x206,\r\n ALWAYS = 0x207,\r\n KEEP = 0x1e00,\r\n REPLACE = 0x1e01,\r\n INCR = 0x1e02,\r\n DECR = 0x1e03,\r\n INVERT = 0x150a,\r\n INCR_WRAP = 0x8507,\r\n DECR_WRAP = 0x8508,\r\n VENDOR = 0x1f00,\r\n RENDERER = 0x1f01,\r\n VERSION = 0x1f02,\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n NEAREST_MIPMAP_NEAREST = 0x2700,\r\n LINEAR_MIPMAP_NEAREST = 0x2701,\r\n NEAREST_MIPMAP_LINEAR = 0x2702,\r\n LINEAR_MIPMAP_LINEAR = 0x2703,\r\n TEXTURE_MAG_FILTER = 0x2800,\r\n TEXTURE_MIN_FILTER = 0x2801,\r\n TEXTURE_WRAP_S = 0x2802,\r\n TEXTURE_WRAP_T = 0x2803,\r\n TEXTURE = 0x1702,\r\n TEXTURE_CUBE_MAP = 0x8513,\r\n TEXTURE_BINDING_CUBE_MAP = 0x8514,\r\n TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,\r\n TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,\r\n TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,\r\n TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a,\r\n MAX_CUBE_MAP_TEXTURE_SIZE = 0x851c,\r\n TEXTURE0 = 0x84c0,\r\n TEXTURE1 = 0x84c1,\r\n TEXTURE2 = 0x84c2,\r\n TEXTURE3 = 0x84c3,\r\n TEXTURE4 = 0x84c4,\r\n TEXTURE5 = 0x84c5,\r\n TEXTURE6 = 0x84c6,\r\n TEXTURE7 = 0x84c7,\r\n TEXTURE8 = 0x84c8,\r\n TEXTURE9 = 0x84c9,\r\n TEXTURE10 = 0x84ca,\r\n TEXTURE11 = 0x84cb,\r\n TEXTURE12 = 0x84cc,\r\n TEXTURE13 = 0x84cd,\r\n TEXTURE14 = 0x84ce,\r\n TEXTURE15 = 0x84cf,\r\n TEXTURE16 = 0x84d0,\r\n TEXTURE17 = 0x84d1,\r\n TEXTURE18 = 0x84d2,\r\n TEXTURE19 = 0x84d3,\r\n TEXTURE20 = 0x84d4,\r\n TEXTURE21 = 0x84d5,\r\n TEXTURE22 = 0x84d6,\r\n TEXTURE23 = 0x84d7,\r\n TEXTURE24 = 0x84d8,\r\n TEXTURE25 = 0x84d9,\r\n TEXTURE26 = 0x84da,\r\n TEXTURE27 = 0x84db,\r\n TEXTURE28 = 0x84dc,\r\n TEXTURE29 = 0x84dd,\r\n TEXTURE30 = 0x84de,\r\n TEXTURE31 = 0x84df,\r\n ACTIVE_TEXTURE = 0x84e0,\r\n REPEAT = 0x2901,\r\n CLAMP_TO_EDGE = 0x812f,\r\n MIRRORED_REPEAT = 0x8370,\r\n FLOAT_VEC2 = 0x8b50,\r\n FLOAT_VEC3 = 0x8b51,\r\n FLOAT_VEC4 = 0x8b52,\r\n INT_VEC2 = 0x8b53,\r\n INT_VEC3 = 0x8b54,\r\n INT_VEC4 = 0x8b55,\r\n BOOL = 0x8b56,\r\n BOOL_VEC2 = 0x8b57,\r\n BOOL_VEC3 = 0x8b58,\r\n BOOL_VEC4 = 0x8b59,\r\n FLOAT_MAT2 = 0x8b5a,\r\n FLOAT_MAT3 = 0x8b5b,\r\n FLOAT_MAT4 = 0x8b5c,\r\n SAMPLER_2D = 0x8b5e,\r\n SAMPLER_CUBE = 0x8b60,\r\n VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,\r\n VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,\r\n VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,\r\n VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,\r\n VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886a,\r\n VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,\r\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889f,\r\n IMPLEMENTATION_COLOR_READ_TYPE = 0x8b9a,\r\n IMPLEMENTATION_COLOR_READ_FORMAT = 0x8b9b,\r\n COMPILE_STATUS = 0x8b81,\r\n LOW_FLOAT = 0x8df0,\r\n MEDIUM_FLOAT = 0x8df1,\r\n HIGH_FLOAT = 0x8df2,\r\n LOW_INT = 0x8df3,\r\n MEDIUM_INT = 0x8df4,\r\n HIGH_INT = 0x8df5,\r\n FRAMEBUFFER = 0x8d40,\r\n RENDERBUFFER = 0x8d41,\r\n RGBA4 = 0x8056,\r\n RGB5_A1 = 0x8057,\r\n RGB565 = 0x8d62,\r\n DEPTH_COMPONENT16 = 0x81a5,\r\n STENCIL_INDEX8 = 0x8d48,\r\n DEPTH_STENCIL = 0x84f9,\r\n RENDERBUFFER_WIDTH = 0x8d42,\r\n RENDERBUFFER_HEIGHT = 0x8d43,\r\n RENDERBUFFER_INTERNAL_FORMAT = 0x8d44,\r\n RENDERBUFFER_RED_SIZE = 0x8d50,\r\n RENDERBUFFER_GREEN_SIZE = 0x8d51,\r\n RENDERBUFFER_BLUE_SIZE = 0x8d52,\r\n RENDERBUFFER_ALPHA_SIZE = 0x8d53,\r\n RENDERBUFFER_DEPTH_SIZE = 0x8d54,\r\n RENDERBUFFER_STENCIL_SIZE = 0x8d55,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8cd0,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8cd1,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8cd2,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8cd3,\r\n COLOR_ATTACHMENT0 = 0x8ce0,\r\n DEPTH_ATTACHMENT = 0x8d00,\r\n STENCIL_ATTACHMENT = 0x8d20,\r\n DEPTH_STENCIL_ATTACHMENT = 0x821a,\r\n NONE = 0x0,\r\n FRAMEBUFFER_COMPLETE = 0x8cd5,\r\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8cd6,\r\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8cd7,\r\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8cd9,\r\n FRAMEBUFFER_UNSUPPORTED = 0x8cdd,\r\n FRAMEBUFFER_BINDING = 0x8ca6,\r\n RENDERBUFFER_BINDING = 0x8ca7,\r\n MAX_RENDERBUFFER_SIZE = 0x84e8,\r\n INVALID_FRAMEBUFFER_OPERATION = 0x506,\r\n UNPACK_FLIP_Y_WEBGL = 0x9240,\r\n UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,\r\n CONTEXT_LOST_WEBGL = 0x9242,\r\n UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,\r\n BROWSER_DEFAULT_WEBGL = 0x9244,\r\n TEXTURE_MAX_ANISOTROPY = 0x84fe,\r\n MAX_TEXTURE_MAX_ANISOTROPY = 0x84ff\r\n}\r\n","/**\r\n * Utilitty functions and classes\r\n */\r\n\r\nimport { WebGLEnum } from './webgl_enum';\r\n\r\nexport function isWebGL2(gl: WebGLRenderingContext | WebGL2RenderingContext): gl is WebGL2RenderingContext {\r\n return !!(gl && (gl as any).texStorage2D);\r\n}\r\n\r\nexport class WebGLError extends Error {\r\n private static readonly errorToString: Record<number, string> = {\r\n [WebGLEnum.NO_ERROR]: 'NO_ERROR',\r\n [WebGLEnum.INVALID_ENUM]: 'INVALID_ENUM',\r\n [WebGLEnum.INVALID_VALUE]: 'INVALID_VALUE',\r\n [WebGLEnum.INVALID_OPERATION]: 'INVALID_OPERATION',\r\n [WebGLEnum.INVALID_FRAMEBUFFER_OPERATION]: 'INVALID_FRAMEBUFFER_OPERATION',\r\n [WebGLEnum.OUT_OF_MEMORY]: 'OUT_OF_MEMORY',\r\n [WebGLEnum.CONTEXT_LOST_WEBGL]: 'CONTEXT_LOST_WEBGL'\r\n };\r\n code: number;\r\n constructor(code: number) {\r\n super(WebGLError.errorToString[code]);\r\n this.code = code;\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport { CubeFace } from '@zephyr3d/base';\r\nimport type {\r\n TextureType,\r\n CompareFunc,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n PrimitiveType,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n FaceWinding,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport { PBPrimitiveType } from '@zephyr3d/device';\r\nimport { WebGLEnum } from './webgl_enum';\r\n\r\nexport const blendEquationMap: Record<BlendEquation, number> = {\r\n add: WebGLEnum.FUNC_ADD,\r\n subtract: WebGLEnum.FUNC_SUBTRACT,\r\n 'reverse-subtract': WebGLEnum.FUNC_REVERSE_SUBTRACT,\r\n max: WebGLEnum.FUNC_MAX,\r\n min: WebGLEnum.FUNC_MIN\r\n};\r\n\r\nexport const blendEquationInvMap: Record<number, BlendEquation> = {\r\n [WebGLEnum.FUNC_ADD]: 'add',\r\n [WebGLEnum.FUNC_SUBTRACT]: 'subtract',\r\n [WebGLEnum.FUNC_REVERSE_SUBTRACT]: 'reverse-subtract',\r\n [WebGLEnum.FUNC_MAX]: 'max',\r\n [WebGLEnum.FUNC_MIN]: 'min'\r\n};\r\n\r\nexport const blendFuncMap: Record<BlendFunc, number> = {\r\n zero: WebGLEnum.ZERO,\r\n one: WebGLEnum.ONE,\r\n 'src-alpha': WebGLEnum.SRC_ALPHA,\r\n 'inv-src-alpha': WebGLEnum.ONE_MINUS_SRC_ALPHA,\r\n 'src-alpha-saturate': WebGLEnum.BLEND,\r\n 'dst-alpha': WebGLEnum.DST_ALPHA,\r\n 'inv-dst-alpha': WebGLEnum.ONE_MINUS_DST_ALPHA,\r\n 'src-color': WebGLEnum.SRC_COLOR,\r\n 'inv-src-color': WebGLEnum.ONE_MINUS_SRC_COLOR,\r\n 'dst-color': WebGLEnum.DST_COLOR,\r\n 'inv-dst-color': WebGLEnum.ONE_MINUS_DST_COLOR,\r\n 'const-color': WebGLEnum.CONSTANT_COLOR,\r\n 'inv-const-color': WebGLEnum.ONE_MINUS_CONSTANT_COLOR,\r\n 'const-alpha': WebGLEnum.CONSTANT_ALPHA,\r\n 'inv-const-alpha': WebGLEnum.ONE_MINUS_CONSTANT_ALPHA\r\n};\r\n\r\nexport const blendFuncInvMap: Record<number, BlendFunc> = {\r\n [WebGLEnum.ZERO]: 'zero',\r\n [WebGLEnum.ONE]: 'one',\r\n [WebGLEnum.SRC_ALPHA]: 'src-alpha',\r\n [WebGLEnum.ONE_MINUS_SRC_ALPHA]: 'inv-src-alpha',\r\n [WebGLEnum.SRC_ALPHA_SATURATE]: 'src-alpha-saturate',\r\n [WebGLEnum.DST_ALPHA]: 'dst-alpha',\r\n [WebGLEnum.ONE_MINUS_DST_ALPHA]: 'inv-dst-alpha',\r\n [WebGLEnum.SRC_COLOR]: 'src-color',\r\n [WebGLEnum.ONE_MINUS_SRC_COLOR]: 'inv-src-color',\r\n [WebGLEnum.DST_COLOR]: 'dst-color',\r\n [WebGLEnum.ONE_MINUS_DST_COLOR]: 'inv-dst-color',\r\n [WebGLEnum.CONSTANT_COLOR]: 'const-color',\r\n [WebGLEnum.ONE_MINUS_CONSTANT_COLOR]: 'inv-const-color',\r\n [WebGLEnum.CONSTANT_ALPHA]: 'const-alpha',\r\n [WebGLEnum.ONE_MINUS_CONSTANT_ALPHA]: 'inv-const-alpha'\r\n};\r\n\r\nexport const faceModeMap: Record<FaceMode, number> = {\r\n none: WebGLEnum.NONE,\r\n front: WebGLEnum.FRONT,\r\n back: WebGLEnum.BACK\r\n};\r\n\r\nexport const faceModeInvMap: Record<number, FaceMode> = {\r\n [WebGLEnum.NONE]: 'none',\r\n [WebGLEnum.FRONT]: 'front',\r\n [WebGLEnum.BACK]: 'back'\r\n};\r\n\r\nexport const faceWindingMap: Record<FaceWinding, number> = {\r\n cw: WebGLEnum.CW,\r\n ccw: WebGLEnum.CCW\r\n};\r\n\r\nexport const faceWindingInvMap: Record<number, FaceWinding> = {\r\n [WebGLEnum.CW]: 'cw',\r\n [WebGLEnum.CCW]: 'ccw'\r\n};\r\n\r\nexport const stencilOpMap: Record<StencilOp, number> = {\r\n keep: WebGLEnum.KEEP,\r\n zero: WebGLEnum.ZERO,\r\n replace: WebGLEnum.REPLACE,\r\n incr: WebGLEnum.INCR,\r\n 'incr-wrap': WebGLEnum.INCR_WRAP,\r\n decr: WebGLEnum.DECR,\r\n 'decr-wrap': WebGLEnum.DECR_WRAP,\r\n invert: WebGLEnum.INVERT\r\n};\r\n\r\nexport const stencilOpInvMap: Record<number, StencilOp> = {\r\n [WebGLEnum.KEEP]: 'keep',\r\n [WebGLEnum.ZERO]: 'zero',\r\n [WebGLEnum.REPLACE]: 'replace',\r\n [WebGLEnum.INCR]: 'incr',\r\n [WebGLEnum.INCR_WRAP]: 'incr-wrap',\r\n [WebGLEnum.DECR]: 'decr',\r\n [WebGLEnum.DECR_WRAP]: 'decr-wrap',\r\n [WebGLEnum.INVERT]: 'invert'\r\n};\r\n\r\nexport const compareFuncMap: Record<CompareFunc, number> = {\r\n always: WebGLEnum.ALWAYS,\r\n le: WebGLEnum.LEQUAL,\r\n ge: WebGLEnum.GEQUAL,\r\n lt: WebGLEnum.LESS,\r\n gt: WebGLEnum.GREATER,\r\n eq: WebGLEnum.EQUAL,\r\n ne: WebGLEnum.NOTEQUAL,\r\n never: WebGLEnum.NEVER\r\n};\r\n\r\nexport const compareFuncInvMap: Record<number, Nullable<CompareFunc>> = {\r\n [WebGLEnum.NONE]: null,\r\n [WebGLEnum.ALWAYS]: 'always',\r\n [WebGLEnum.LEQUAL]: 'le',\r\n [WebGLEnum.GEQUAL]: 'ge',\r\n [WebGLEnum.LESS]: 'lt',\r\n [WebGLEnum.GREATER]: 'gt',\r\n [WebGLEnum.EQUAL]: 'eq',\r\n [WebGLEnum.NOTEQUAL]: 'ne',\r\n [WebGLEnum.NEVER]: 'never'\r\n};\r\n\r\nexport const textureWrappingMap: Record<TextureAddressMode, number> = {\r\n repeat: WebGLEnum.REPEAT,\r\n 'mirrored-repeat': WebGLEnum.MIRRORED_REPEAT,\r\n clamp: WebGLEnum.CLAMP_TO_EDGE\r\n};\r\n\r\nexport const typeMap = {\r\n [PBPrimitiveType.BOOL]: WebGLEnum.BOOL,\r\n [PBPrimitiveType.BVEC2]: WebGLEnum.BOOL_VEC2,\r\n [PBPrimitiveType.BVEC3]: WebGLEnum.BOOL_VEC3,\r\n [PBPrimitiveType.BVEC4]: WebGLEnum.BOOL_VEC4,\r\n [PBPrimitiveType.F32]: WebGLEnum.FLOAT,\r\n [PBPrimitiveType.F32VEC2]: WebGLEnum.FLOAT_VEC2,\r\n [PBPrimitiveType.F32VEC3]: WebGLEnum.FLOAT_VEC3,\r\n [PBPrimitiveType.F32VEC4]: WebGLEnum.FLOAT_VEC4,\r\n [PBPrimitiveType.I8]: WebGLEnum.BYTE,\r\n [PBPrimitiveType.I16]: WebGLEnum.SHORT,\r\n [PBPrimitiveType.I32]: WebGLEnum.INT,\r\n [PBPrimitiveType.I32VEC2]: WebGLEnum.INT_VEC2,\r\n [PBPrimitiveType.I32VEC3]: WebGLEnum.INT_VEC3,\r\n [PBPrimitiveType.I32VEC4]: WebGLEnum.INT_VEC4,\r\n [PBPrimitiveType.U8]: WebGLEnum.UNSIGNED_BYTE,\r\n [PBPrimitiveType.U8_NORM]: WebGLEnum.UNSIGNED_BYTE,\r\n [PBPrimitiveType.I8_NORM]: WebGLEnum.BYTE,\r\n [PBPrimitiveType.U16]: WebGLEnum.UNSIGNED_SHORT,\r\n [PBPrimitiveType.U16_NORM]: WebGLEnum.UNSIGNED_SHORT,\r\n [PBPrimitiveType.I16_NORM]: WebGLEnum.SHORT,\r\n [PBPrimitiveType.U32]: WebGLEnum.UNSIGNED_INT,\r\n [PBPrimitiveType.U32VEC2]: WebGLEnum.UNSIGNED_INT_VEC2,\r\n [PBPrimitiveType.U32VEC3]: WebGLEnum.UNSIGNED_INT_VEC3,\r\n [PBPrimitiveType.U32VEC4]: WebGLEnum.UNSIGNED_INT_VEC4\r\n};\r\n\r\nexport const primitiveTypeMap: Record<PrimitiveType, number> = {\r\n 'triangle-list': WebGLEnum.TRIANGLES,\r\n 'triangle-strip': WebGLEnum.TRIANGLE_STRIP,\r\n 'triangle-fan': WebGLEnum.TRIANGLE_FAN,\r\n 'line-list': WebGLEnum.LINES,\r\n 'line-strip': WebGLEnum.LINE_STRIP,\r\n 'point-list': WebGLEnum.POINTS\r\n};\r\n\r\nexport const textureTargetMap: Record<TextureType, number> = {\r\n '2d': WebGLEnum.TEXTURE_2D,\r\n '3d': WebGLEnum.TEXTURE_3D,\r\n cube: WebGLEnum.TEXTURE_CUBE_MAP,\r\n '2darray': WebGLEnum.TEXTURE_2D_ARRAY\r\n};\r\n\r\nexport const cubeMapFaceMap = {\r\n [CubeFace.PX]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_X,\r\n [CubeFace.NX]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_X,\r\n [CubeFace.PY]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_Y,\r\n [CubeFace.NY]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_Y,\r\n [CubeFace.PZ]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_Z,\r\n [CubeFace.NZ]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n};\r\n\r\nexport function textureMagFilterToWebGL(magFilter: TextureFilterMode) {\r\n switch (magFilter) {\r\n case 'nearest':\r\n return WebGLEnum.NEAREST;\r\n case 'linear':\r\n return WebGLEnum.LINEAR;\r\n default:\r\n return WebGLEnum.NONE;\r\n }\r\n}\r\n\r\nexport function textureMinFilterToWebGL(minFilter: TextureFilterMode, mipFilter: TextureFilterMode) {\r\n switch (minFilter) {\r\n case 'nearest':\r\n switch (mipFilter) {\r\n case 'none':\r\n return WebGLEnum.NEAREST;\r\n case 'nearest':\r\n return WebGLEnum.NEAREST_MIPMAP_NEAREST;\r\n case 'linear':\r\n return WebGLEnum.NEAREST_MIPMAP_LINEAR;\r\n }\r\n break;\r\n case 'linear':\r\n switch (mipFilter) {\r\n case 'none':\r\n return WebGLEnum.LINEAR;\r\n case 'nearest':\r\n return WebGLEnum.LINEAR_MIPMAP_NEAREST;\r\n case 'linear':\r\n return WebGLEnum.LINEAR_MIPMAP_LINEAR;\r\n }\r\n break;\r\n }\r\n return WebGLEnum.NONE;\r\n}\r\n","import type {\r\n BindGroup,\r\n VertexLayout,\r\n TextureSampler,\r\n BaseTexture,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCube,\r\n TextureVideo,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n GPUObject,\r\n AbstractDevice\r\n} from '@zephyr3d/device';\r\nimport { genDefaultName } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { Disposable, type Nullable } from '@zephyr3d/base';\r\n\r\nlet _uniqueId = 0;\r\n\r\nexport abstract class WebGLGPUObject<T> extends Disposable implements GPUObject<T> {\r\n protected _device: WebGLDevice;\r\n protected _object: Nullable<T>;\r\n protected _uid: number;\r\n protected _cid: number;\r\n protected _name: string;\r\n protected _restoreHandler: Nullable<(obj: GPUObject) => void>;\r\n constructor(device: WebGLDevice) {\r\n super();\r\n this._device = device;\r\n this._object = null;\r\n this._uid = ++_uniqueId;\r\n this._cid = 1;\r\n this._name = genDefaultName(this);\r\n this._restoreHandler = null;\r\n this._device.addGPUObject(this);\r\n }\r\n get device(): AbstractDevice {\r\n return this._device;\r\n }\r\n get object() {\r\n return this._object;\r\n }\r\n get restoreHandler() {\r\n return this._restoreHandler;\r\n }\r\n set restoreHandler(handler: Nullable<(obj: GPUObject) => void>) {\r\n this._restoreHandler = handler;\r\n }\r\n get uid() {\r\n return this._uid;\r\n }\r\n get cid() {\r\n return this._cid;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n if (val !== this._name) {\r\n const lastName = this._name;\r\n this._name = val;\r\n this._device.dispatchEvent('gpuobject_rename', this, lastName);\r\n }\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return false;\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return false;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return false;\r\n }\r\n isTexture(): this is BaseTexture {\r\n return false;\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return false;\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return false;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return false;\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return false;\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return false;\r\n }\r\n isProgram(): this is GPUProgram {\r\n return false;\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return false;\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return false;\r\n }\r\n reload() {\r\n if (this.disposed) {\r\n this._device.restoreObject(this);\r\n this._cid++;\r\n }\r\n }\r\n destroy() {\r\n throw new Error('Abstract function call: destroy()');\r\n }\r\n restore() {\r\n throw new Error('Abstract function call: restore()');\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._device.disposeObject(this, true);\r\n }\r\n}\r\n","import type { Immutable, Nullable, RequireOptionals, TypedArray } from '@zephyr3d/base';\r\nimport { isPowerOf2 } from '@zephyr3d/base';\r\nimport type {\r\n SamplerOptions,\r\n BaseTexture,\r\n TextureType,\r\n TextureFormat,\r\n GPUDataBuffer,\r\n FrameBuffer\r\n} from '@zephyr3d/device';\r\nimport {\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n isFloatTextureFormat,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n GPUResourceUsageFlags,\r\n isSRGBTextureFormat,\r\n getTextureFormatBlockWidth,\r\n getTextureFormatBlockHeight,\r\n getTextureFormatBlockSize\r\n} from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { cubeMapFaceMap, textureTargetMap } from './constants_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { WebGLTextureCaps, TextureFormatInfoWebGL } from './capabilities_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport abstract class WebGLBaseTexture extends WebGLGPUObject<WebGLTexture> {\r\n protected _target: TextureType;\r\n protected _memCost: number;\r\n protected _flags: number;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _depth: number;\r\n protected _format: Nullable<TextureFormat>;\r\n protected _mipLevelCount: number;\r\n protected _samplerOptions: Nullable<RequireOptionals<SamplerOptions>>;\r\n protected _webgl1fallback: boolean;\r\n protected _readFrameBuffers: FrameBuffer[][];\r\n constructor(device: WebGLDevice, target?: TextureType) {\r\n super(device);\r\n this._target = target || '2d';\r\n this._memCost = 0;\r\n this._flags = 0;\r\n this._width = 0;\r\n this._height = 0;\r\n this._depth = 1;\r\n this._format = null;\r\n this._mipLevelCount = 0;\r\n this._samplerOptions = null;\r\n this._webgl1fallback = false;\r\n this._readFrameBuffers = [];\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n get memCost() {\r\n return this._memCost;\r\n }\r\n get format() {\r\n return this._format!;\r\n }\r\n get mipLevelCount() {\r\n return this._mipLevelCount;\r\n }\r\n get samplerOptions(): Nullable<Immutable<SamplerOptions>> {\r\n return this._samplerOptions;\r\n }\r\n set samplerOptions(options: Nullable<Immutable<SamplerOptions>>) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n this._samplerOptions = options\r\n ? Object.assign({}, this._getSamplerOptions(params, !!options.compare), options)\r\n : null;\r\n } else {\r\n console.log('Set sampler options failed: Texture not initialized');\r\n }\r\n }\r\n get isWebGL1Fallback() {\r\n return this._webgl1fallback;\r\n }\r\n isFilterable() {\r\n if (!this._format || !this.getTextureCaps().getTextureFormatInfo(this._format)?.filterable) {\r\n return false;\r\n }\r\n if (!(this.device as WebGLDevice).isWebGL2 && !isPowerOf2(this._width) && !isPowerOf2(this._height)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteTexture(this._object);\r\n this._device.invalidateBindingTextures();\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n for (const x of this._readFrameBuffers) {\r\n if (x) {\r\n for (const fb of x) {\r\n if (fb) {\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n }\r\n this._readFrameBuffers = [];\r\n this._memCost = 0;\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.init();\r\n }\r\n }\r\n isTexture(): this is BaseTexture {\r\n return true;\r\n }\r\n getTextureCaps() {\r\n return this._device.getDeviceCaps().textureCaps;\r\n }\r\n isSRGBFormat() {\r\n return !!this._format && isSRGBTextureFormat(this._format);\r\n }\r\n isFloatFormat() {\r\n return !!this._format && isFloatTextureFormat(this._format);\r\n }\r\n isIntegerFormat() {\r\n return !!this._format && isIntegerTextureFormat(this._format);\r\n }\r\n isSignedFormat() {\r\n return !!this._format && isSignedTextureFormat(this._format);\r\n }\r\n isCompressedFormat() {\r\n return !!this._format && isCompressedTextureFormat(this._format);\r\n }\r\n isDepth() {\r\n return !!this._format && hasDepthChannel(this._format);\r\n }\r\n getDefaultSampler(shadow: boolean) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n return this._device.createSampler(\r\n !this._samplerOptions || !this._samplerOptions.compare !== !shadow\r\n ? this._getSamplerOptions(params, shadow)\r\n : this._samplerOptions\r\n );\r\n } else {\r\n throw new Error('Get default sampler failed: texture not initialized');\r\n }\r\n }\r\n protected _getFramebufferForRead(faceOrLevel: number, mipLevel: number) {\r\n let faceFramebuffers = this._readFrameBuffers[faceOrLevel];\r\n if (!faceFramebuffers) {\r\n faceFramebuffers = [];\r\n this._readFrameBuffers[faceOrLevel] = faceFramebuffers;\r\n }\r\n let framebuffer = faceFramebuffers[mipLevel];\r\n if (!framebuffer) {\r\n framebuffer = this._device.createFrameBuffer([this], null);\r\n if (this.isTextureCube()) {\r\n framebuffer.setColorAttachmentCubeFace(0, faceOrLevel);\r\n } else if (this.isTexture2DArray() || this.isTexture3D()) {\r\n framebuffer.setColorAttachmentLayer(0, faceOrLevel);\r\n }\r\n framebuffer.setColorAttachmentMipLevel(0, mipLevel);\r\n framebuffer.setColorAttachmentGenerateMipmaps(0, false);\r\n faceFramebuffers[mipLevel] = framebuffer;\r\n }\r\n return framebuffer;\r\n }\r\n abstract generateMipmaps(): void;\r\n abstract init(): void;\r\n abstract readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n /** @internal */\r\n protected allocInternal(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n if (!this._device.isWebGL2 && (!isPowerOf2(width) || !isPowerOf2(height))) {\r\n numMipLevels = 1;\r\n this._webgl1fallback = true;\r\n } else {\r\n this._webgl1fallback = false;\r\n }\r\n this._device.setCurrentSamplerForTexture(this, null);\r\n if (numMipLevels === 0) {\r\n numMipLevels = this._calcMipLevelCount(format, width, height, depth);\r\n } else if (numMipLevels !== 1) {\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n const autoMipLevelCount = Math.floor(Math.log2(size)) + 1; //this._calcMipLevelCount(format, width, height, depth);\r\n if (!Number.isInteger(numMipLevels) || numMipLevels < 0 || numMipLevels > autoMipLevelCount) {\r\n numMipLevels = autoMipLevelCount;\r\n }\r\n }\r\n if (\r\n this._object &&\r\n (this._format !== format || this._width !== width || this._height !== height || this._depth !== depth,\r\n this._mipLevelCount !== numMipLevels)\r\n ) {\r\n const obj = this._object;\r\n this._device.runNextFrame(() => {\r\n this._device.context.deleteTexture(obj);\r\n this._device.invalidateBindingTextures();\r\n });\r\n this._object = null;\r\n }\r\n if (!this._object) {\r\n this._format = format;\r\n this._width = width;\r\n this._height = height;\r\n this._depth = depth;\r\n this._mipLevelCount = numMipLevels;\r\n if (!this._device.isContextLost()) {\r\n this._object = this._device.context.createTexture();\r\n const gl = this._device.context;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n if (isWebGL2(gl) && !this.isTextureVideo()) {\r\n if (!this.isTexture3D() && !this.isTexture2DArray()) {\r\n gl.texStorage2D(\r\n textureTargetMap[this._target],\r\n this._mipLevelCount,\r\n params.glInternalFormat,\r\n this._width,\r\n this._height\r\n );\r\n } else {\r\n gl.texStorage3D(\r\n textureTargetMap[this._target],\r\n this._mipLevelCount,\r\n params.glInternalFormat,\r\n this._width,\r\n this._height,\r\n this._depth\r\n );\r\n }\r\n this._device.context.texParameteri(textureTargetMap[this._target], WebGLEnum.TEXTURE_BASE_LEVEL, 0);\r\n this._device.context.texParameteri(\r\n textureTargetMap[this._target],\r\n WebGLEnum.TEXTURE_MAX_LEVEL,\r\n this._mipLevelCount - 1\r\n );\r\n } else {\r\n let w = this._width;\r\n let h = this._height;\r\n const isCompressed = isCompressedTextureFormat(this._format);\r\n const blockWidth = getTextureFormatBlockWidth(this._format);\r\n const blockHeight = getTextureFormatBlockHeight(this._format);\r\n const blockSize = getTextureFormatBlockSize(this._format);\r\n for (let mip = 0; mip < numMipLevels; mip++) {\r\n const data = isCompressed\r\n ? new Uint8Array(Math.ceil(w / blockWidth) * Math.ceil(h / blockHeight) * blockSize)\r\n : null;\r\n data?.fill(0xff);\r\n if (this.isTextureCube()) {\r\n for (let face = 0; face < 6; face++) {\r\n const faceTarget = cubeMapFaceMap[face as keyof typeof cubeMapFaceMap];\r\n if (isCompressed) {\r\n this._device.context.compressedTexImage2D(\r\n faceTarget,\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n data!\r\n );\r\n } else {\r\n this._device.context.texImage2D(\r\n faceTarget,\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n null\r\n );\r\n }\r\n }\r\n } else {\r\n if (isCompressed) {\r\n this._device.context.compressedTexImage2D(\r\n textureTargetMap[this._target],\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n data!\r\n );\r\n } else {\r\n this._device.context.texImage2D(\r\n textureTargetMap[this._target],\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n null\r\n );\r\n }\r\n }\r\n w = Math.max(w >> 1, 1);\r\n h = Math.max(h >> 1, 1);\r\n }\r\n }\r\n const k = this.isTextureCube() ? 6 : 1;\r\n const memCost = (this.getTextureCaps() as WebGLTextureCaps).calcMemoryUsage(\r\n this._format,\r\n params.glType[0],\r\n this._width * this._height * this._depth * k\r\n );\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _calcMipLevelCount(format: TextureFormat, width: number, height: number, depth: number) {\r\n if (hasDepthChannel(format) || this.isTextureVideo()) {\r\n return 1;\r\n }\r\n if (this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP) {\r\n return 1;\r\n }\r\n if (!this._device.isWebGL2 && (!isPowerOf2(width) || !isPowerOf2(height))) {\r\n return 1;\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(format);\r\n if (!params || !params.renderable) {\r\n return 1;\r\n }\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n return Math.floor(Math.log2(size)) + 1;\r\n }\r\n /** @internal */\r\n protected _getSamplerOptions(params: Immutable<TextureFormatInfoWebGL>, shadow: boolean) {\r\n const comparison = this.isDepth() && shadow;\r\n const filterable = params.filterable || comparison;\r\n const magFilter = filterable ? 'linear' : 'nearest';\r\n const minFilter = filterable ? 'linear' : 'nearest';\r\n const mipFilter = this._mipLevelCount > 1 ? (filterable ? 'linear' : 'nearest') : 'none';\r\n return {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter,\r\n lodMin: 0,\r\n lodMax: 32,\r\n maxAnisotropy: 1,\r\n compare: comparison ? 'lt' : null\r\n } as const;\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n TextureMipmapData,\r\n Texture2D,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture2D extends WebGLBaseTexture implements Texture2D<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n super(device, '2d');\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n width,\r\n height,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLevel: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (faceOrLevel !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter 'faceOrLayer' must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(0, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLevel: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (faceOrLevel !== 0) {\r\n throw new Error(`Texture2D.readPixelsToBuffer(): parameter 'faceOrLayer' must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n }\r\n loadFromElement(element: TextureImageElement, sRGB: boolean, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n const format = sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n this.loadImage(element, format);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (data.isCubemap || data.isVolume) {\r\n console.error('loading 2d texture with mipmap data failed: data is not 2d texture');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, width: number, height: number, numMipLevels: number) {\r\n this.allocInternal(format, width, height, 1, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n let format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n let swizzle = false;\r\n if (format === 'bgra8unorm') {\r\n format = 'rgba8unorm';\r\n swizzle = true;\r\n } else if (format === 'bgra8unorm-srgb') {\r\n format = 'rgba8unorm-srgb';\r\n swizzle = true;\r\n }\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.warn('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let i = 0; i < this._mipLevelCount; i++) {\r\n if (levels.isCompressed) {\r\n this._device.context.compressedTexSubImage2D(\r\n target,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n params.glInternalFormat,\r\n levels.mipDatas[0][i].data\r\n );\r\n } else {\r\n if (swizzle) {\r\n // convert bgra to rgba\r\n for (let j = 0; j < levels.mipDatas[0][i].width * levels.mipDatas[0][i].height; j++) {\r\n const t = levels.mipDatas[0][i].data[j * 4];\r\n levels.mipDatas[0][i].data[j * 4] = levels.mipDatas[0][i].data[j * 4 + 2];\r\n levels.mipDatas[0][i].data[j * 4 + 2] = t;\r\n }\r\n }\r\n this._device.context.texSubImage2D(\r\n target,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[0][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadImage(element: TextureImageElement, format: TextureFormat) {\r\n this.allocInternal(format, Number(element.width), Number(element.height), 1, 0);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n (this.device as WebGLDevice).clearErrors();\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 4);\r\n this._device.context.texSubImage2D(target, 0, 0, 0, params.glFormat, params.glType[0], element);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n Texture2DArray,\r\n GPUDataBuffer,\r\n TextureFormat,\r\n TextureMipmapData\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture2DArray extends WebGLBaseTexture implements Texture2DArray<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n if (!device.isWebGL2) {\r\n throw new Error('device does not support 2d texture array');\r\n }\r\n super(device, '2darray');\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n zOffset,\r\n width,\r\n height,\r\n depth,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, 1)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let layer = 0; layer < levels.arraySize; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n if (levels.isCompressed) {\r\n gl.compressedTexSubImage3D(\r\n gl.TEXTURE_2D_ARRAY,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glInternalFormat,\r\n levels.mipDatas[layer][i].data\r\n );\r\n } else {\r\n gl.texSubImage3D(\r\n gl.TEXTURE_2D_ARRAY,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[layer][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n layerIndex: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n layerIndex,\r\n width,\r\n height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n layerIndex,\r\n width,\r\n height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(layer, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentLayer(0, layer);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { Texture3D, GPUDataBuffer, TextureFormat, TextureMipmapData } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture3D extends WebGLBaseTexture implements Texture3D<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n if (!device.isWebGL2) {\r\n throw new Error('device does not support 3D texture');\r\n }\r\n super(device, '3d');\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n zOffset,\r\n width,\r\n height,\r\n depth,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixels(): parameter mipLevel must be 0`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(layer, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixelsToBuffer(): parameter mipLevel must be 0`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentLayer(0, layer);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.depth;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let layer = 0; layer < depth; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n if (levels.isCompressed) {\r\n gl.compressedTexSubImage3D(\r\n gl.TEXTURE_3D,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glInternalFormat,\r\n levels.mipDatas[layer][i].data\r\n );\r\n } else {\r\n gl.texSubImage3D(\r\n gl.TEXTURE_3D,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[layer][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { CubeFace, TypedArray } from '@zephyr3d/base';\r\nimport type {\r\n TextureMipmapData,\r\n TextureCube,\r\n TextureImageElement,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport { textureTargetMap, cubeMapFaceMap } from './constants_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTextureCube extends WebGLBaseTexture implements TextureCube<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n super(device, 'cube');\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number, face: CubeFace) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n width,\r\n height,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n face: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face as keyof typeof cubeMapFaceMap],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createEmpty(format: TextureFormat, size: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, size, 0);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(face, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentCubeFace(0, face);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return true;\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (!data.isCubemap) {\r\n console.error('loading cubmap with mipmap data failed: data is not cubemap');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error('webgl device does not support storage texture');\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, size: number, mipLevelCount: number) {\r\n this.allocInternal(format, size, size, 1, mipLevelCount);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /*\r\n private loadImages(images: HTMLImageElement[], format: TextureFormat): void {\r\n const width = images[0].width;\r\n const height = images[0].height;\r\n if (images.length !== 6) {\r\n console.error(new Error('cubemap face list must have 6 images'));\r\n return;\r\n }\r\n for (let i = 1; i < 6; i++) {\r\n if (images[i].width !== width || images[i].height !== height) {\r\n console.error(new Error('cubemap face images must have identical sizes'));\r\n return;\r\n }\r\n }\r\n if (width === 0 || height === 0) {\r\n return;\r\n }\r\n this.allocInternal(format, width, height, 1, 0);\r\n if (!this._device.isContextLost()) {\r\n (this.device as WebGLDevice).clearErrors();\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n for (let face = 0; face < 6; face++) {\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face],\r\n 0,\r\n 0,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n images[face]\r\n );\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n const format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.warn('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let face = 0; face < 6; face++) {\r\n const faceTarget = cubeMapFaceMap[face as keyof typeof cubeMapFaceMap];\r\n if (this._mipLevelCount > 1 && levels.mipDatas[face].length !== this._mipLevelCount) {\r\n console.error(`invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < this._mipLevelCount; i++) {\r\n if (levels.isCompressed) {\r\n this._device.context.compressedTexSubImage2D(\r\n faceTarget,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n params.glInternalFormat,\r\n levels.mipDatas[face][i].data\r\n );\r\n } else {\r\n this._device.context.texSubImage2D(\r\n faceTarget,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[face][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import type { GPUDataBuffer, TextureVideo } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\n\r\nexport class WebGLTextureVideo extends WebGLBaseTexture implements TextureVideo<WebGLTexture> {\r\n private _source!: HTMLVideoElement;\r\n private _callbackId: Nullable<number>;\r\n constructor(device: WebGLDevice, source: HTMLVideoElement) {\r\n super(device, '2d');\r\n this._callbackId = null;\r\n this._format = null;\r\n this.loadFromElement(source);\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return true;\r\n }\r\n get source() {\r\n return this._source;\r\n }\r\n destroy() {\r\n if (this._source && this._callbackId !== null) {\r\n this._source.cancelVideoFrameCallback(this._callbackId);\r\n }\r\n super.destroy();\r\n }\r\n init() {\r\n this.loadElement(this._source);\r\n }\r\n /** @internal */\r\n loadFromElement(el: HTMLVideoElement) {\r\n this._flags = GPUResourceUsageFlags.TF_NO_MIPMAP;\r\n this.loadElement(el);\r\n }\r\n generateMipmaps() {\r\n // Does nothing\r\n }\r\n async readPixels(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: TypedArray\r\n ) {\r\n throw new Error(`Video texture does not support readPixels()`);\r\n }\r\n readPixelsToBuffer(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: GPUDataBuffer<unknown>\r\n ) {\r\n throw new Error(`Video texture does not support readPixelsToBuffer()`);\r\n }\r\n /** @internal */\r\n updateVideoFrame() {\r\n if (this.object && this._source.currentTime > 0 && !this._source.requestVideoFrameCallback) {\r\n this.update();\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private update() {\r\n this.allocInternal('rgba8unorm', this._source.videoWidth, this._source.videoHeight, 1, 1);\r\n if (!this._device.isContextLost()) {\r\n const target = textureTargetMap[this._target];\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texImage2D(\r\n target,\r\n 0,\r\n params.glInternalFormat,\r\n params.glFormat,\r\n params.glType[0],\r\n this._source\r\n );\r\n }\r\n }\r\n /** @internal */\r\n private loadElement(element: HTMLVideoElement) {\r\n if (this._source && this._callbackId !== null) {\r\n this._source.cancelVideoFrameCallback(this._callbackId);\r\n this._callbackId = null;\r\n }\r\n this._source = element;\r\n if (this._source?.requestVideoFrameCallback) {\r\n const that = this;\r\n that._callbackId = this._source.requestVideoFrameCallback(function cb() {\r\n if (that._object) {\r\n that.update();\r\n that._callbackId = that._source.requestVideoFrameCallback(cb);\r\n }\r\n });\r\n }\r\n this.allocInternal(\r\n 'rgba8unorm',\r\n Math.max(this._source.videoWidth, 1),\r\n Math.max(this._source.videoHeight, 1),\r\n 1,\r\n 1\r\n );\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type {\r\n VertexLayout,\r\n StructuredBuffer,\r\n VertexSemantic,\r\n VertexLayoutOptions,\r\n PrimitiveType\r\n} from '@zephyr3d/device';\r\nimport { VertexData } from '@zephyr3d/device';\r\nimport { typeMap } from './constants_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLVertexLayout\r\n extends WebGLGPUObject<WebGLVertexArrayObject | WebGLVertexArrayObjectOES>\r\n implements VertexLayout<WebGLVertexArrayObject | WebGLVertexArrayObjectOES>\r\n{\r\n private readonly _vertexData: VertexData;\r\n private _dirty: boolean;\r\n constructor(device: WebGLDevice, options: VertexLayoutOptions) {\r\n super(device);\r\n this._vertexData = new VertexData();\r\n this._dirty = false;\r\n for (const vb of options.vertexBuffers) {\r\n this._vertexData.setVertexBuffer(vb.buffer, vb.stepMode);\r\n }\r\n if (options.indexBuffer) {\r\n this._vertexData.setIndexBuffer(options.indexBuffer);\r\n }\r\n this.load();\r\n }\r\n destroy() {\r\n if (this._object && this._device.vaoExt) {\r\n this._device.vaoExt.deleteVertexArray(this._object);\r\n }\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n get vertexBuffers() {\r\n return this._vertexData.vertexBuffers;\r\n }\r\n get indexBuffer() {\r\n return this._vertexData.indexBuffer;\r\n }\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number) {\r\n for (const info of this._vertexData.vertexBuffers) {\r\n if (info?.buffer === buffer && info.drawOffset !== byteOffset) {\r\n info.drawOffset = byteOffset;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n getVertexBuffer(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBuffer(semantic);\r\n }\r\n getVertexBufferInfo(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBufferInfo(semantic);\r\n }\r\n getIndexBuffer() {\r\n return this._vertexData.getIndexBuffer();\r\n }\r\n bind() {\r\n if (this._object && this._device.vaoExt) {\r\n this._device.vaoExt.bindVertexArray(this._object);\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this.bindBuffers();\r\n }\r\n } else {\r\n this.bindBuffers();\r\n }\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this._device.setVertexLayout(this);\r\n this._device.draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this._device.setVertexLayout(this);\r\n this._device.drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return true;\r\n }\r\n private load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (this._device.vaoExt) {\r\n if (!this._object) {\r\n this._object = this._device.vaoExt.createVertexArray();\r\n this._device.vaoExt.bindVertexArray(this._object);\r\n this.bindBuffers();\r\n this._device.vaoExt.bindVertexArray(null);\r\n }\r\n } else {\r\n this._object = {};\r\n }\r\n }\r\n private bindBuffers() {\r\n const vertexBuffers = this._vertexData.vertexBuffers;\r\n const gl = this._device.context;\r\n for (let loc = 0; loc < vertexBuffers.length; loc++) {\r\n const bufferInfo = vertexBuffers[loc];\r\n const buffer = bufferInfo?.buffer;\r\n if (buffer) {\r\n if (buffer.disposed) {\r\n buffer.reload();\r\n }\r\n gl.bindBuffer(WebGLEnum.ARRAY_BUFFER, buffer.object!);\r\n gl.enableVertexAttribArray(loc);\r\n if (bufferInfo.stepMode === 'instance' && this._device.instancedArraysExt) {\r\n gl.vertexAttribPointer(\r\n loc,\r\n bufferInfo.type.cols,\r\n typeMap[bufferInfo.type.scalarType],\r\n bufferInfo.type.normalized,\r\n bufferInfo.stride,\r\n bufferInfo.offset\r\n );\r\n this._device.instancedArraysExt.vertexAttribDivisor(loc, 1);\r\n } else {\r\n gl.vertexAttribPointer(\r\n loc,\r\n bufferInfo.type.cols,\r\n typeMap[bufferInfo.type.scalarType],\r\n bufferInfo.type.normalized,\r\n bufferInfo.stride,\r\n bufferInfo.drawOffset + bufferInfo.offset\r\n );\r\n }\r\n } else {\r\n gl.disableVertexAttribArray(loc);\r\n }\r\n }\r\n if (this._vertexData.indexBuffer?.disposed) {\r\n this._vertexData.indexBuffer.reload();\r\n }\r\n gl.bindBuffer(\r\n WebGLEnum.ELEMENT_ARRAY_BUFFER,\r\n this._vertexData.indexBuffer ? this._vertexData.indexBuffer.object! : null\r\n );\r\n }\r\n}\r\n","import type { GPUDataBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { isWebGL2 } from './utils';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLGPUBuffer extends WebGLGPUObject<WebGLBuffer> implements GPUDataBuffer<WebGLBuffer> {\r\n protected _size: number;\r\n protected _usage: number;\r\n protected _systemMemoryBuffer: Nullable<Uint8Array<ArrayBuffer>>;\r\n protected _systemMemory: boolean;\r\n protected _memCost: number;\r\n constructor(device: WebGLDevice, usage: number, data: TypedArray | number, systemMemory = false) {\r\n super(device);\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX && usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('buffer usage must not have Vertex and Index simultaneously');\r\n }\r\n if (\r\n !device.isWebGL2 &&\r\n !(usage & GPUResourceUsageFlags.BF_VERTEX) &&\r\n !(usage & GPUResourceUsageFlags.BF_INDEX) &&\r\n !(usage & GPUResourceUsageFlags.BF_UNIFORM)\r\n ) {\r\n throw new Error('no Vertex or Index or Uniform usage set when creating buffer');\r\n }\r\n if (device.isWebGL2 && !(usage & ~GPUResourceUsageFlags.DYNAMIC)) {\r\n throw new Error('buffer usage not set when creating buffer');\r\n }\r\n if (usage & GPUResourceUsageFlags.DYNAMIC && usage & GPUResourceUsageFlags.MANAGED) {\r\n throw new Error('buffer usage DYNAMIC and MANAGED can not be both set');\r\n }\r\n this._object = null;\r\n this._memCost = 0;\r\n this._usage = usage;\r\n this._size = typeof data === 'number' ? data : data.byteLength;\r\n if (this._size <= 0) {\r\n throw new Error('can not create buffer with zero size');\r\n }\r\n this._systemMemory = !!systemMemory;\r\n if (this._systemMemory || this._usage & GPUResourceUsageFlags.MANAGED) {\r\n this._systemMemoryBuffer = new Uint8Array(this._size);\r\n if (data && typeof data !== 'number') {\r\n this._systemMemoryBuffer.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\r\n }\r\n } else {\r\n this._systemMemoryBuffer = null;\r\n }\r\n if (!this._systemMemory) {\r\n this.load(this._systemMemoryBuffer || (typeof data === 'number' ? null : data));\r\n }\r\n }\r\n get byteLength() {\r\n return this._size;\r\n }\r\n get systemMemoryBuffer() {\r\n return this._systemMemoryBuffer?.buffer || null;\r\n }\r\n get usage() {\r\n return this._usage;\r\n }\r\n bufferSubData(dstByteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n srcPos = Number(srcPos) || 0;\r\n dstByteOffset = Number(dstByteOffset) || 0;\r\n srcLength = Number(srcLength) || data.length - srcPos;\r\n if (srcPos + srcLength > data.length) {\r\n throw new Error('bufferSubData() failed: source buffer is too small');\r\n }\r\n if (dstByteOffset + srcLength * data.BYTES_PER_ELEMENT > this.byteLength) {\r\n throw new Error('bufferSubData() failed: dest buffer is too small');\r\n }\r\n if (this._systemMemoryBuffer) {\r\n // copy to system backup buffer if present\r\n this._systemMemoryBuffer.set(\r\n new Uint8Array(\r\n data.buffer,\r\n data.byteOffset + srcPos * data.BYTES_PER_ELEMENT,\r\n srcLength * data.BYTES_PER_ELEMENT\r\n ),\r\n dstByteOffset\r\n );\r\n }\r\n if (!this._systemMemory && !this.device.isContextLost()) {\r\n if (this.disposed) {\r\n this.reload();\r\n }\r\n if (!this._device.isWebGL2 && (srcPos !== 0 || srcLength !== data.length)) {\r\n data = data.subarray(srcPos, srcPos + srcLength);\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_WRITE)) {\r\n target = WebGLEnum.COPY_WRITE_BUFFER;\r\n } else if (\r\n this._usage &\r\n (GPUResourceUsageFlags.BF_PACK_PIXEL | GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n } else {\r\n throw new Error(`Invalid buffer usage`);\r\n }\r\n this._device.context.bindBuffer(target, this._object);\r\n if (this._device.isWebGL2) {\r\n (this._device.context as WebGL2RenderingContext).bufferSubData(\r\n target,\r\n dstByteOffset,\r\n data,\r\n srcPos,\r\n srcLength\r\n );\r\n } else {\r\n this._device.context.bufferSubData(target, dstByteOffset, data);\r\n }\r\n }\r\n }\r\n async getBufferSubData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n if (this.disposed) {\r\n this.reload();\r\n }\r\n return this._getBufferData(dstBuffer, offsetInBytes, sizeInBytes);\r\n }\r\n protected async _getBufferData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n offsetInBytes = Number(offsetInBytes) || 0;\r\n sizeInBytes = Number(sizeInBytes) || this.byteLength - offsetInBytes;\r\n if (offsetInBytes < 0 || offsetInBytes + sizeInBytes > this.byteLength) {\r\n throw new Error('data query range out of bounds');\r\n }\r\n if (dstBuffer && dstBuffer.byteLength < sizeInBytes) {\r\n throw new Error('no enough space for querying buffer data');\r\n }\r\n dstBuffer = dstBuffer || new Uint8Array(sizeInBytes);\r\n if (this._systemMemoryBuffer) {\r\n dstBuffer.set(new Uint8Array(this._systemMemoryBuffer.buffer, offsetInBytes, sizeInBytes));\r\n } else {\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n if (isWebGL2(gl)) {\r\n const sync = gl.fenceSync(WebGLEnum.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (sync) {\r\n await this.clientWaitAsync(gl, sync, 0, 10);\r\n gl.deleteSync(sync);\r\n }\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_WRITE)) {\r\n target = WebGLEnum.COPY_READ_BUFFER;\r\n } else if (\r\n this._usage &\r\n (GPUResourceUsageFlags.BF_PACK_PIXEL | GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n target = WebGLEnum.PIXEL_UNPACK_BUFFER;\r\n } else {\r\n throw new Error(`Invalid buffer usage`);\r\n }\r\n gl.bindBuffer(target, this._object);\r\n gl.getBufferSubData(target, offsetInBytes, dstBuffer, 0, sizeInBytes);\r\n gl.bindBuffer(target, null);\r\n }\r\n return dstBuffer;\r\n }\r\n restore() {\r\n if (!this._systemMemory && !this._object && !this._device.isContextLost()) {\r\n this.load(this._systemMemoryBuffer);\r\n }\r\n }\r\n destroy() {\r\n if (!this._systemMemory && this._object) {\r\n this._device.context.deleteBuffer(this._object);\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n this._memCost = 0;\r\n }\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return true;\r\n }\r\n protected load(data: Nullable<TypedArray>) {\r\n if (!this._device.isContextLost()) {\r\n if (!this._object) {\r\n this._object = this._device.context.createBuffer();\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let usage =\r\n this._usage & GPUResourceUsageFlags.DYNAMIC ? WebGLEnum.DYNAMIC_DRAW : WebGLEnum.STATIC_DRAW;\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_READ) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n usage = WebGLEnum.STREAM_READ;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_WRITE) {\r\n target = WebGLEnum.COPY_WRITE_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_PACK_PIXEL) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n usage = WebGLEnum.STREAM_READ;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNPACK_PIXEL) {\r\n target = WebGLEnum.PIXEL_UNPACK_BUFFER;\r\n } else {\r\n throw new Error(`WebGLGPUBuffer.load() failed: invalid buffer usage: ${this._usage}`);\r\n }\r\n this._device.context.bindBuffer(target, this._object);\r\n if (data) {\r\n this._device.context.bufferData(target, data, usage);\r\n } else {\r\n this._device.context.bufferData(target, (this._size + 15) & ~15, usage);\r\n }\r\n }\r\n this._device.updateVideoMemoryCost(this._size - this._memCost);\r\n this._memCost = this._size;\r\n }\r\n /** @internal */\r\n private async clientWaitAsync(\r\n gl: WebGL2RenderingContext,\r\n sync: WebGLSync,\r\n flags: number,\r\n interval_ms: number\r\n ) {\r\n return new Promise<void>((resolve, reject) => {\r\n function test() {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n reject();\r\n return;\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n setTimeout(test, interval_ms);\r\n return;\r\n }\r\n resolve();\r\n }\r\n test();\r\n });\r\n }\r\n}\r\n","import type { IndexBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags, PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\n\r\nexport class WebGLIndexBuffer extends WebGLGPUBuffer implements IndexBuffer {\r\n readonly indexType: PBPrimitiveTypeInfo;\r\n readonly length: number;\r\n constructor(\r\n device: WebGLDevice,\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n usage?: number\r\n ) {\r\n if (!(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n throw new Error('invalid index data');\r\n }\r\n super(device, GPUResourceUsageFlags.BF_INDEX | (usage ?? 0), data);\r\n this.indexType = data instanceof Uint16Array ? typeU16 : typeU32;\r\n this.length = data.length;\r\n }\r\n}\r\n","import { CubeFace, type Nullable } from '@zephyr3d/base';\r\nimport type { BaseTexture, FrameBuffer, FrameBufferOptions } from '@zephyr3d/device';\r\nimport { hasStencilChannel } from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { cubeMapFaceMap } from './constants_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTexture2D } from './texture2d_webgl';\r\nimport type { WebGLTextureCube } from './texturecube_webgl';\r\n\r\ntype FrameBufferTextureAttachment = {\r\n texture: BaseTexture;\r\n face?: number;\r\n layer?: number;\r\n level?: number;\r\n generateMipmaps?: boolean;\r\n};\r\n\r\ntype Options = {\r\n colorAttachments: Nullable<FrameBufferTextureAttachment[]>;\r\n depthAttachment: Nullable<FrameBufferTextureAttachment>;\r\n sampleCount?: number;\r\n ignoreDepthStencil?: boolean;\r\n};\r\n\r\nconst STATUS_UNCHECKED = 0;\r\nconst STATUS_OK = 1;\r\nconst STATUS_FAILED = 2;\r\nexport class WebGLFrameBuffer\r\n extends WebGLGPUObject<WebGLFramebuffer>\r\n implements FrameBuffer<WebGLFramebuffer>\r\n{\r\n private readonly _options: Options;\r\n private _needBindBuffers: boolean;\r\n private _drawTags: number;\r\n private _lastDrawTag: number;\r\n private _status: number;\r\n private _statusAA: number;\r\n private readonly _width: number;\r\n private readonly _height: number;\r\n private readonly _isMRT: boolean;\r\n private _drawBuffers: number[];\r\n private readonly _hash: string;\r\n private _needGenerateMipmaps: boolean;\r\n private readonly _depthAttachmentTarget: number;\r\n private _colorAttachmentsAA: Nullable<WebGLRenderbuffer[]>;\r\n private _depthAttachmentAA: Nullable<WebGLRenderbuffer>;\r\n private _intermediateAttachments: Nullable<\r\n Map<BaseTexture, { texture: WebGLTexture; width: number; height: number }[]>\r\n >;\r\n private _framebufferAA: Nullable<WebGLFramebuffer>;\r\n private _initialized: boolean;\r\n constructor(\r\n device: WebGLDevice,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n opt?: FrameBufferOptions\r\n ) {\r\n super(device);\r\n if (colorAttachments.length > 0 && colorAttachments.findIndex((val) => !val) >= 0) {\r\n throw new Error('WebGLFramebuffer(): invalid color attachments');\r\n }\r\n this._object = null;\r\n this._framebufferAA = null;\r\n this._colorAttachmentsAA = null;\r\n this._depthAttachmentAA = null;\r\n this._intermediateAttachments = null;\r\n this._needBindBuffers = false;\r\n this._drawTags = 0;\r\n this._lastDrawTag = -1;\r\n this._status = STATUS_UNCHECKED;\r\n this._statusAA = STATUS_UNCHECKED;\r\n this._options = {\r\n colorAttachments:\r\n colorAttachments?.length > 0\r\n ? colorAttachments.map((value) => ({\r\n texture: value,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: true\r\n }))\r\n : null,\r\n depthAttachment: depthAttachment\r\n ? {\r\n texture: depthAttachment,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: false\r\n }\r\n : null,\r\n sampleCount: device.type === 'webgl' ? 1 : (opt?.sampleCount ?? 1),\r\n ignoreDepthStencil: opt?.ignoreDepthStencil ?? false\r\n };\r\n if (!this._options.colorAttachments && !this._options.depthAttachment) {\r\n throw new Error('WebGLFramebuffer(): colorAttachments or depthAttachment must be specified');\r\n }\r\n this._width = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.width\r\n : this._options.depthAttachment!.texture.width;\r\n this._height = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.height\r\n : this._options.depthAttachment!.texture.height;\r\n if (\r\n (this._options.colorAttachments &&\r\n this._options.colorAttachments.findIndex(\r\n (val) => val.texture.width !== this._width || val.texture.height !== this._height\r\n ) >= 0) ||\r\n (this._options.depthAttachment &&\r\n (this._options.depthAttachment.texture.width !== this._width ||\r\n this._options.depthAttachment.texture.height !== this._height))\r\n ) {\r\n throw new Error('WebGLFramebuffer(): attachment textures must have same width and height');\r\n }\r\n this._drawBuffers =\r\n this._options.colorAttachments?.map((val, index) => WebGLEnum.COLOR_ATTACHMENT0 + index) ?? [];\r\n this._isMRT = this._drawBuffers.length > 1;\r\n if (this._options.depthAttachment) {\r\n const format = this._options.depthAttachment.texture.format;\r\n this._depthAttachmentTarget = hasStencilChannel(format)\r\n ? WebGLEnum.DEPTH_STENCIL_ATTACHMENT\r\n : WebGLEnum.DEPTH_ATTACHMENT;\r\n } else {\r\n this._depthAttachmentTarget = WebGLEnum.NONE;\r\n }\r\n const colorAttachmentHash =\r\n this._options.colorAttachments?.map((tex) => tex.texture.format).join(':') ?? '';\r\n const depthAttachmentHash = this._options.depthAttachment?.texture.format ?? '';\r\n this._hash = `${colorAttachmentHash}-${depthAttachmentHash}-${this._options.sampleCount ?? 1}`;\r\n this._needGenerateMipmaps = false;\r\n this._initialized = false;\r\n }\r\n tagDraw() {\r\n this._drawTags++;\r\n }\r\n isMRT() {\r\n return this._isMRT;\r\n }\r\n invalidateMipmaps() {\r\n this._needGenerateMipmaps = true;\r\n }\r\n getWidth() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment!;\r\n return Math.max(attachment.texture.width >> attachment.level!, 1);\r\n }\r\n getHeight() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment!;\r\n return Math.max(attachment.texture.height >> attachment.level!, 1);\r\n }\r\n getHash() {\r\n return this._hash;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n if (this._options?.depthAttachment?.texture?.disposed) {\r\n this._options.depthAttachment.texture.reload();\r\n }\r\n if (this._options?.colorAttachments) {\r\n for (const k of this._options.colorAttachments) {\r\n if (k?.texture?.disposed) {\r\n k.texture.reload();\r\n }\r\n }\r\n }\r\n }\r\n this._init();\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteFramebuffer(this._object);\r\n this._object = null;\r\n if (this._colorAttachmentsAA) {\r\n for (const rb of this._colorAttachmentsAA) {\r\n this._device.context.deleteRenderbuffer(rb);\r\n }\r\n this._colorAttachmentsAA = null;\r\n }\r\n if (this._depthAttachmentAA) {\r\n this._device.context.deleteRenderbuffer(this._depthAttachmentAA);\r\n this._depthAttachmentAA = null;\r\n }\r\n if (this._framebufferAA) {\r\n this._device.context.deleteFramebuffer(this._framebufferAA);\r\n this._framebufferAA = null;\r\n }\r\n if (this._intermediateAttachments) {\r\n for (const entry of this._intermediateAttachments) {\r\n for (const rb of entry[1]) {\r\n if (rb) {\r\n this._device.context.deleteTexture(rb.texture);\r\n this._device.invalidateBindingTextures();\r\n }\r\n }\r\n }\r\n this._intermediateAttachments = null;\r\n }\r\n }\r\n }\r\n setColorAttachmentGenerateMipmaps(index: number, generateMipmaps: boolean) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k) {\r\n k.generateMipmaps = !!generateMipmaps;\r\n }\r\n }\r\n getColorAttachmentGenerateMipmaps(index: number) {\r\n return !!this._options.colorAttachments?.[index]?.generateMipmaps;\r\n }\r\n setColorAttachmentCubeFace(index: number, face: CubeFace) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.face !== face) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.face = face;\r\n this.bind();\r\n } else {\r\n k.face = face;\r\n }\r\n }\r\n }\r\n getColorAttachmentCubeFace(index: number) {\r\n return (this._options.colorAttachments?.[index]?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setColorAttachmentMipLevel(index: number, level: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.level !== level) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.level = level;\r\n this.bind();\r\n } else {\r\n k.level = level;\r\n }\r\n }\r\n }\r\n getColorAttachmentMipLevel(index: number) {\r\n return this._options.colorAttachments?.[index]?.level ?? 0;\r\n }\r\n setColorAttachmentLayer(index: number, layer: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.layer !== layer) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.layer = layer;\r\n this.bind();\r\n } else {\r\n k.layer = layer;\r\n }\r\n }\r\n }\r\n getColorAttachmentLayer(index: number) {\r\n return this._options?.colorAttachments?.[index]?.layer ?? 0;\r\n }\r\n setDepthAttachmentCubeFace(face: CubeFace) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.face !== face) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.face = face;\r\n this.bind();\r\n } else {\r\n k.face = face;\r\n }\r\n }\r\n }\r\n getDepthAttachmentCubeFace() {\r\n return (this._options.depthAttachment?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setDepthAttachmentLayer(layer: number) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.layer !== layer) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.layer = layer;\r\n this.bind();\r\n } else {\r\n k.layer = layer;\r\n }\r\n }\r\n }\r\n getDepthAttachmentLayer() {\r\n return this._options.depthAttachment?.layer ?? 0;\r\n }\r\n getDepthAttachment() {\r\n return this._options?.depthAttachment?.texture || null;\r\n }\r\n getColorAttachments() {\r\n return this._options.colorAttachments?.map((val) => val.texture || null) || [];\r\n }\r\n getColorAttachment<T extends BaseTexture>(index: number): T {\r\n return (this.getColorAttachments()[index] as unknown as T) ?? null;\r\n }\r\n bind() {\r\n if (!this._initialized) {\r\n this._init();\r\n this._initialized = true;\r\n }\r\n if (this._object) {\r\n this._device.context._currentFramebuffer = this;\r\n this._lastDrawTag = -1;\r\n if (this._needBindBuffers) {\r\n this._needBindBuffers = false;\r\n if (!this._bindBuffersAA() || !this._bindBuffers()) {\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n return false;\r\n }\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._framebufferAA || this._object);\r\n const drawBuffersExt = this._device.drawBuffersExt;\r\n if (drawBuffersExt) {\r\n drawBuffersExt.drawBuffers(this._drawBuffers);\r\n } else if (this._isMRT) {\r\n console.error('device does not support multiple framebuffer color attachments');\r\n }\r\n this._device.setViewport(null);\r\n this._device.setScissor(null);\r\n this._needGenerateMipmaps = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n unbind() {\r\n if (this._device.context._currentFramebuffer === this) {\r\n this._updateMSAABuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n this._device.setViewport(null);\r\n this._device.setScissor(null);\r\n const drawBuffersExt = this._device.drawBuffersExt;\r\n if (drawBuffersExt) {\r\n drawBuffersExt.drawBuffers([WebGLEnum.BACK]);\r\n }\r\n if (this._options.colorAttachments) {\r\n for (const attachment of this._options.colorAttachments) {\r\n const tex = attachment.texture;\r\n if (attachment.level! > 0) {\r\n const texture = this._intermediateAttachments?.get(tex)?.[attachment.level!];\r\n if (texture) {\r\n const tmpFramebuffer = this._device.context.createFramebuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, tmpFramebuffer);\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n WebGLEnum.COLOR_ATTACHMENT0,\r\n WebGLEnum.TEXTURE_2D,\r\n texture.texture,\r\n 0\r\n );\r\n if (tex.isTexture2D()) {\r\n this._device.bindTexture(WebGLEnum.TEXTURE_2D, 0, tex as WebGLTexture2D);\r\n //this._device.context.bindTexture(WebGLEnum.TEXTURE_2D, tex.object);\r\n this._device.context.copyTexSubImage2D(\r\n WebGLEnum.TEXTURE_2D,\r\n attachment.level!,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n texture.width,\r\n texture.height\r\n );\r\n } else if (tex.isTextureCube()) {\r\n this._device.bindTexture(WebGLEnum.TEXTURE_CUBE_MAP, 0, tex as WebGLTextureCube);\r\n //this._device.context.bindTexture(WebGLEnum.TEXTURE_CUBE_MAP, tex.object);\r\n this._device.context.copyTexSubImage2D(\r\n cubeMapFaceMap[(attachment.face as CubeFace) ?? CubeFace.PX],\r\n attachment.level!,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n texture.width,\r\n texture.height\r\n );\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context.deleteFramebuffer(tmpFramebuffer);\r\n }\r\n }\r\n if (this._needGenerateMipmaps && attachment.generateMipmaps && tex.mipLevelCount > 1) {\r\n tex.generateMipmaps();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private _updateMSAABuffer() {\r\n if (this._options.sampleCount! > 1 && this._lastDrawTag !== this._drawTags) {\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n gl.bindFramebuffer(WebGLEnum.READ_FRAMEBUFFER, this._framebufferAA);\r\n gl.bindFramebuffer(WebGLEnum.DRAW_FRAMEBUFFER, this._object);\r\n let depthStencilMask = 0;\r\n if (!this._options.ignoreDepthStencil && this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n depthStencilMask =\r\n WebGLEnum.DEPTH_BUFFER_BIT |\r\n (this._depthAttachmentTarget === WebGLEnum.DEPTH_STENCIL_ATTACHMENT\r\n ? WebGLEnum.STENCIL_BUFFER_BIT\r\n : 0);\r\n }\r\n for (let i = 0; i < this._drawBuffers.length; i++) {\r\n for (let j = 0; j < this._drawBuffers.length; j++) {\r\n this._drawBuffers[j] = j === i ? WebGLEnum.COLOR_ATTACHMENT0 + i : WebGLEnum.NONE;\r\n }\r\n gl.readBuffer(this._drawBuffers[i]);\r\n gl.drawBuffers(this._drawBuffers);\r\n gl.blitFramebuffer(\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n WebGLEnum.COLOR_BUFFER_BIT | depthStencilMask,\r\n WebGLEnum.NEAREST\r\n );\r\n depthStencilMask = 0;\r\n }\r\n if (depthStencilMask !== 0) {\r\n gl.blitFramebuffer(\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n depthStencilMask,\r\n WebGLEnum.NEAREST\r\n );\r\n }\r\n for (let i = 0; i < this._drawBuffers.length; i++) {\r\n this._drawBuffers[i] = WebGLEnum.COLOR_ATTACHMENT0 + i;\r\n }\r\n gl.bindFramebuffer(WebGLEnum.READ_FRAMEBUFFER, null);\r\n gl.bindFramebuffer(WebGLEnum.DRAW_FRAMEBUFFER, null);\r\n this._lastDrawTag = this._drawTags;\r\n }\r\n }\r\n private _load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n load: {\r\n if (this._options.sampleCount! > 1) {\r\n this._framebufferAA = this._device.context.createFramebuffer();\r\n this._colorAttachmentsAA = [];\r\n this._depthAttachmentAA = null;\r\n if (!this._bindBuffersAA()) {\r\n this.dispose();\r\n break load;\r\n }\r\n }\r\n this._object = this._device.context.createFramebuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._object);\r\n if (!this._bindBuffers()) {\r\n this.dispose();\r\n }\r\n }\r\n this._lastDrawTag = -1;\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n }\r\n private _bindAttachment(attachment: number, info: FrameBufferTextureAttachment) {\r\n if (info.texture) {\r\n let intermediateTexture: Nullable<WebGLTexture> = null;\r\n if (\r\n this.device.type === 'webgl' &&\r\n !this.device.getDeviceCaps().framebufferCaps.supportRenderMipmap &&\r\n info.level! > 0\r\n ) {\r\n if (!this._intermediateAttachments) {\r\n this._intermediateAttachments = new Map();\r\n }\r\n let intermediateAttachments = this._intermediateAttachments.get(info.texture);\r\n if (!intermediateAttachments) {\r\n intermediateAttachments = [];\r\n this._intermediateAttachments.set(info.texture, intermediateAttachments);\r\n }\r\n if (!intermediateAttachments[info.level!]) {\r\n let width = info.texture.width;\r\n let height = info.texture.height;\r\n let level = info.level!;\r\n while (level-- > 0) {\r\n width = Math.max(width >> 1, 1);\r\n height = Math.max(height >> 1, 1);\r\n }\r\n const formatInfo = (\r\n this.device.getDeviceCaps().textureCaps as WebGLTextureCaps\r\n ).getTextureFormatInfo(info.texture.format);\r\n intermediateTexture = this._device.context.createTexture();\r\n this._device.context.activeTexture(WebGLEnum.TEXTURE0);\r\n this._device.context.bindTexture(WebGLEnum.TEXTURE_2D, intermediateTexture);\r\n this._device.context.texImage2D(\r\n WebGLEnum.TEXTURE_2D,\r\n 0,\r\n formatInfo.glInternalFormat,\r\n width,\r\n height,\r\n 0,\r\n formatInfo.glFormat,\r\n formatInfo.glType[0],\r\n null\r\n );\r\n intermediateAttachments[info.level!] = { texture: intermediateTexture, width, height };\r\n this._device.bindTexture(WebGLEnum.TEXTURE_2D, 0, null);\r\n } else {\r\n intermediateTexture = intermediateAttachments[info.level!].texture;\r\n }\r\n }\r\n if (intermediateTexture) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n WebGLEnum.TEXTURE_2D,\r\n intermediateTexture,\r\n 0\r\n );\r\n } else {\r\n if (info.texture.isTexture2D()) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n WebGLEnum.TEXTURE_2D,\r\n info.texture.object!,\r\n info.level ?? 0\r\n );\r\n } else if (info.texture.isTextureCube()) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n cubeMapFaceMap[(info.face as CubeFace) ?? CubeFace.PX],\r\n info.texture.object!,\r\n info.level ?? 0\r\n );\r\n } else if (info.texture.isTexture2DArray() || info.texture.isTexture3D()) {\r\n (this._device.context as WebGL2RenderingContext).framebufferTextureLayer(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n info.texture.object!,\r\n info.level ?? 0,\r\n info.layer ?? 0\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n private _bindBuffers() {\r\n if (!this._object) {\r\n return false;\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._object);\r\n if (this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n if (!this._bindAttachment(this._depthAttachmentTarget, this._options.depthAttachment!)) {\r\n return false;\r\n }\r\n }\r\n if (this._options.colorAttachments) {\r\n for (let i = 0; i < this._options.colorAttachments.length; i++) {\r\n const opt = this._options.colorAttachments[i];\r\n if (opt.texture) {\r\n if (!this._bindAttachment(WebGLEnum.COLOR_ATTACHMENT0 + i, opt)) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n if (this._status === STATUS_UNCHECKED) {\r\n const status = this._device.context.checkFramebufferStatus(WebGLEnum.FRAMEBUFFER);\r\n if (status !== WebGLEnum.FRAMEBUFFER_COMPLETE) {\r\n console.error(`Framebuffer not complete: ${status}`);\r\n this._status = STATUS_FAILED;\r\n } else {\r\n this._status = STATUS_OK;\r\n }\r\n }\r\n return this._status === STATUS_OK;\r\n }\r\n private _createRenderbufferAA(texture: BaseTexture) {\r\n const renderBuffer = this._device.context.createRenderbuffer();\r\n const formatInfo = (this.device.getDeviceCaps().textureCaps as WebGLTextureCaps).getTextureFormatInfo(\r\n texture.format\r\n );\r\n this._device.context.bindRenderbuffer(WebGLEnum.RENDERBUFFER, renderBuffer);\r\n (this._device.context as WebGL2RenderingContext).renderbufferStorageMultisample(\r\n WebGLEnum.RENDERBUFFER,\r\n this._options.sampleCount!,\r\n formatInfo.glInternalFormat,\r\n this._options.depthAttachment!.texture.width,\r\n this._options.depthAttachment!.texture.height\r\n );\r\n return renderBuffer;\r\n }\r\n private _bindBuffersAA() {\r\n if (!this._framebufferAA) {\r\n return true;\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._framebufferAA);\r\n if (this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n if (!this._depthAttachmentAA) {\r\n this._depthAttachmentAA = this._createRenderbufferAA(this._options.depthAttachment!.texture);\r\n }\r\n this._device.context.framebufferRenderbuffer(\r\n WebGLEnum.FRAMEBUFFER,\r\n this._depthAttachmentTarget,\r\n WebGLEnum.RENDERBUFFER,\r\n this._depthAttachmentAA\r\n );\r\n }\r\n if (this._options.colorAttachments) {\r\n for (let i = 0; i < this._options.colorAttachments.length; i++) {\r\n const opt = this._options.colorAttachments[i];\r\n if (opt.texture) {\r\n if (!this._colorAttachmentsAA![i]) {\r\n this._colorAttachmentsAA![i] = this._createRenderbufferAA(\r\n this._options.colorAttachments[i].texture\r\n );\r\n }\r\n this._device.context.framebufferRenderbuffer(\r\n WebGLEnum.FRAMEBUFFER,\r\n WebGLEnum.COLOR_ATTACHMENT0 + i,\r\n WebGLEnum.RENDERBUFFER,\r\n this._colorAttachmentsAA![i]\r\n );\r\n }\r\n }\r\n }\r\n if (this._statusAA === STATUS_UNCHECKED) {\r\n const status = this._device.context.checkFramebufferStatus(WebGLEnum.FRAMEBUFFER);\r\n if (status !== WebGLEnum.FRAMEBUFFER_COMPLETE) {\r\n console.error(`Framebuffer not complete: ${status}`);\r\n this._statusAA = STATUS_FAILED;\r\n } else {\r\n this._statusAA = STATUS_OK;\r\n }\r\n }\r\n return this._statusAA === STATUS_OK;\r\n }\r\n private _init() {\r\n if (this._options.sampleCount !== 1 && this._options.sampleCount !== 4) {\r\n throw new Error(`WebGLFramebuffer(): Sample should be 1 or 4, got ${this._options.sampleCount}`);\r\n }\r\n if (\r\n this._options.sampleCount > 1 &&\r\n !this._device.getDeviceCaps().framebufferCaps.supportMultisampledFramebuffer\r\n ) {\r\n throw new Error('WebGLFramebuffer(): Multisampled frame buffer not supported');\r\n }\r\n this._load();\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return true;\r\n }\r\n getSampleCount() {\r\n return this._options.sampleCount!;\r\n }\r\n}\r\n","import type {\r\n ColorState,\r\n BlendingState,\r\n RasterizerState,\r\n DepthState,\r\n StencilState,\r\n RenderStateSet,\r\n CompareFunc,\r\n WebGLContext,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport {\r\n blendEquationMap,\r\n blendEquationInvMap,\r\n blendFuncMap,\r\n blendFuncInvMap,\r\n faceModeMap,\r\n faceModeInvMap,\r\n stencilOpMap,\r\n stencilOpInvMap,\r\n compareFuncMap,\r\n compareFuncInvMap\r\n} from './constants_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport abstract class WebGLRenderState {\r\n protected static _defaultState: WebGLRenderState;\r\n protected static _currentState: Nullable<WebGLRenderState>;\r\n apply(gl: WebGLContext, force?: boolean) {\r\n const c: any = this.constructor;\r\n if (force || c._currentState !== this) {\r\n this._apply(gl);\r\n }\r\n c._currentState = this;\r\n }\r\n static get defaultState() {\r\n return WebGLRenderState._defaultState;\r\n }\r\n static applyDefaults(gl: WebGLContext, force?: boolean) {\r\n if (force || this._currentState !== this._defaultState) {\r\n this._defaultState.apply(gl, force);\r\n }\r\n }\r\n protected abstract _apply(gl: WebGLContext): void;\r\n}\r\n\r\nexport class WebGLColorState extends WebGLRenderState implements ColorState {\r\n protected static _defaultState: WebGLColorState = new WebGLColorState();\r\n protected static _currentState: Nullable<WebGLColorState> = null;\r\n redMask: boolean;\r\n greenMask: boolean;\r\n blueMask: boolean;\r\n alphaMask: boolean;\r\n constructor() {\r\n super();\r\n this.redMask = this.greenMask = this.blueMask = this.alphaMask = true;\r\n }\r\n clone() {\r\n return new WebGLColorState().setColorMask(this.redMask, this.greenMask, this.blueMask, this.alphaMask);\r\n }\r\n setColorMask(r: boolean, g: boolean, b: boolean, a: boolean) {\r\n this.redMask = r;\r\n this.greenMask = g;\r\n this.blueMask = b;\r\n this.alphaMask = a;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n gl.colorMask(this.redMask, this.greenMask, this.blueMask, this.alphaMask);\r\n }\r\n}\r\n\r\nexport class WebGLBlendingState extends WebGLRenderState implements BlendingState {\r\n protected static _defaultState: WebGLBlendingState = new WebGLBlendingState();\r\n protected static _currentState: Nullable<WebGLBlendingState> = null;\r\n private _srcBlendRGB!: number;\r\n private _dstBlendRGB!: number;\r\n private _srcBlendAlpha!: number;\r\n private _dstBlendAlpha!: number;\r\n private _rgbEquation!: number;\r\n private _alphaEquation!: number;\r\n enabled: boolean;\r\n alphaToCoverageEnabled: boolean;\r\n constructor() {\r\n super();\r\n this.enabled = false;\r\n this.alphaToCoverageEnabled = false;\r\n this.srcBlendRGB = 'one';\r\n this.dstBlendRGB = 'zero';\r\n this.srcBlendAlpha = 'one';\r\n this.dstBlendAlpha = 'zero';\r\n this.rgbEquation = 'add';\r\n this.alphaEquation = 'add';\r\n }\r\n clone() {\r\n const other = new WebGLBlendingState();\r\n other.enable(this.enabled);\r\n other.enableAlphaToCoverage(this.alphaToCoverageEnabled);\r\n other.setBlendFuncRGB(this.srcBlendRGB, this.dstBlendRGB);\r\n other.setBlendFuncAlpha(this.srcBlendAlpha, this.dstBlendAlpha);\r\n other.setBlendEquation(this.rgbEquation, this.alphaEquation);\r\n return other;\r\n }\r\n get srcBlendRGB() {\r\n return blendFuncInvMap[this._srcBlendRGB];\r\n }\r\n set srcBlendRGB(val: BlendFunc) {\r\n this._srcBlendRGB = blendFuncMap[val];\r\n }\r\n get dstBlendRGB() {\r\n return blendFuncInvMap[this._dstBlendRGB];\r\n }\r\n set dstBlendRGB(val: BlendFunc) {\r\n this._dstBlendRGB = blendFuncMap[val];\r\n }\r\n get srcBlendAlpha() {\r\n return blendFuncInvMap[this._srcBlendAlpha];\r\n }\r\n set srcBlendAlpha(val: BlendFunc) {\r\n this._srcBlendAlpha = blendFuncMap[val];\r\n }\r\n get dstBlendAlpha() {\r\n return blendFuncInvMap[this._dstBlendAlpha];\r\n }\r\n set dstBlendAlpha(val: BlendFunc) {\r\n this._dstBlendAlpha = blendFuncMap[val];\r\n }\r\n get rgbEquation() {\r\n return blendEquationInvMap[this._rgbEquation];\r\n }\r\n set rgbEquation(val: BlendEquation) {\r\n this._rgbEquation = blendEquationMap[val];\r\n }\r\n get alphaEquation() {\r\n return blendEquationInvMap[this._alphaEquation];\r\n }\r\n set alphaEquation(val: BlendEquation) {\r\n this._alphaEquation = blendEquationMap[val];\r\n }\r\n enable(b: boolean) {\r\n this.enabled = !!b;\r\n return this;\r\n }\r\n enableAlphaToCoverage(b: boolean) {\r\n this.alphaToCoverageEnabled = !!b;\r\n return this;\r\n }\r\n setBlendFunc(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendFuncRGB(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n return this;\r\n }\r\n setBlendFuncAlpha(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendEquation(rgb: BlendEquation, alpha: BlendEquation) {\r\n this.rgbEquation = rgb;\r\n this.alphaEquation = alpha;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.enabled) {\r\n gl.enable(WebGLEnum.BLEND);\r\n gl.blendEquationSeparate(this._rgbEquation, this._alphaEquation);\r\n if (this._srcBlendRGB === this._srcBlendAlpha && this._dstBlendRGB === this._dstBlendAlpha) {\r\n gl.blendFunc(this._srcBlendRGB, this._dstBlendRGB);\r\n } else {\r\n gl.blendFuncSeparate(this._srcBlendRGB, this._dstBlendRGB, this._srcBlendAlpha, this._dstBlendAlpha);\r\n }\r\n } else {\r\n gl.disable(WebGLEnum.BLEND);\r\n }\r\n if (this.alphaToCoverageEnabled) {\r\n gl.enable(WebGLEnum.SAMPLE_ALPHA_TO_COVERAGE);\r\n } else {\r\n gl.disable(WebGLEnum.SAMPLE_ALPHA_TO_COVERAGE);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLRasterizerState extends WebGLRenderState implements RasterizerState {\r\n protected static _defaultState: WebGLRasterizerState = new WebGLRasterizerState();\r\n protected static _currentState: Nullable<WebGLRasterizerState> = null;\r\n private _cullMode!: number;\r\n constructor() {\r\n super();\r\n this.cullMode = 'back';\r\n }\r\n clone() {\r\n return new WebGLRasterizerState().setCullMode(this.cullMode);\r\n }\r\n get cullMode() {\r\n return faceModeInvMap[this._cullMode];\r\n }\r\n set cullMode(val: FaceMode) {\r\n this._cullMode = faceModeMap[val];\r\n }\r\n setCullMode(mode: FaceMode) {\r\n this.cullMode = mode;\r\n return this;\r\n }\r\n get depthClampEnabled() {\r\n return false;\r\n }\r\n set depthClampEnabled(val: boolean) {\r\n this.enableDepthClamp(val);\r\n }\r\n enableDepthClamp(enable: boolean) {\r\n if (enable) {\r\n console.error('Depth clamp not supported');\r\n }\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.cullMode == 'none') {\r\n gl.disable(WebGLEnum.CULL_FACE);\r\n } else {\r\n gl.enable(WebGLEnum.CULL_FACE);\r\n gl.cullFace(this._cullMode);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLDepthState extends WebGLRenderState implements DepthState {\r\n protected static _defaultState: WebGLDepthState = new WebGLDepthState();\r\n protected static _currentState: Nullable<WebGLDepthState> = null;\r\n testEnabled: boolean;\r\n writeEnabled: boolean;\r\n depthBias: number;\r\n depthBiasSlopeScale: number;\r\n private _compareFunc!: number;\r\n constructor() {\r\n super();\r\n this.testEnabled = true;\r\n this.writeEnabled = true;\r\n this.compareFunc = 'le';\r\n this.depthBias = 0;\r\n this.depthBiasSlopeScale = 0;\r\n }\r\n clone() {\r\n const other = new WebGLDepthState();\r\n other.enableTest(this.testEnabled);\r\n other.enableWrite(this.writeEnabled);\r\n other.setCompareFunc(this.compareFunc);\r\n other.setDepthBias(this.depthBias);\r\n other.setDepthBiasSlopeScale(this.depthBiasSlopeScale);\r\n return other;\r\n }\r\n get compareFunc() {\r\n return compareFuncInvMap[this._compareFunc]!;\r\n }\r\n set compareFunc(val: CompareFunc) {\r\n this._compareFunc = compareFuncMap[val];\r\n }\r\n enableTest(b: boolean) {\r\n this.testEnabled = b;\r\n return this;\r\n }\r\n enableWrite(b: boolean) {\r\n this.writeEnabled = b;\r\n return this;\r\n }\r\n setCompareFunc(func: CompareFunc) {\r\n this.compareFunc = func;\r\n return this;\r\n }\r\n setDepthBias(value: number) {\r\n this.depthBias = value;\r\n return this;\r\n }\r\n setDepthBiasSlopeScale(value: number) {\r\n this.depthBiasSlopeScale = value;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.testEnabled) {\r\n gl.enable(WebGLEnum.DEPTH_TEST);\r\n gl.depthFunc(this._compareFunc);\r\n } else {\r\n gl.disable(WebGLEnum.DEPTH_TEST);\r\n }\r\n gl.depthMask(this.writeEnabled);\r\n if (this.depthBias !== 0 || this.depthBiasSlopeScale !== 0) {\r\n gl.enable(gl.POLYGON_OFFSET_FILL);\r\n gl.polygonOffset(this.depthBiasSlopeScale, this.depthBias);\r\n } else {\r\n gl.disable(gl.POLYGON_OFFSET_FILL);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLStencilState extends WebGLRenderState implements StencilState {\r\n protected static _defaultState: WebGLStencilState = new WebGLStencilState();\r\n protected static _currentState: Nullable<WebGLStencilState> = null;\r\n enabled: boolean;\r\n writeMask: number;\r\n ref: number;\r\n readMask: number;\r\n private _failOp!: number;\r\n private _failOpBack!: number;\r\n private _zFailOp!: number;\r\n private _zFailOpBack!: number;\r\n private _passOp!: number;\r\n private _passOpBack!: number;\r\n private _func!: number;\r\n private _funcBack!: number;\r\n constructor() {\r\n super();\r\n this.enabled = false;\r\n this.failOp = this.failOpBack = 'keep';\r\n this.zFailOp = this.zFailOpBack = 'keep';\r\n this.passOp = this.passOpBack = 'keep';\r\n this.func = this.funcBack = 'always';\r\n this.ref = 0;\r\n this.writeMask = 0xffffffff;\r\n this.readMask = 0xffffffff;\r\n }\r\n clone() {\r\n const other = new WebGLStencilState();\r\n other.enable(this.enabled);\r\n other.setWriteMask(this.writeMask);\r\n other.setFrontOp(this.failOp, this.zFailOp, this.passOp);\r\n other.setBackOp(this.failOpBack, this.zFailOpBack, this.passOpBack);\r\n other.setFrontCompareFunc(this.func);\r\n other.setBackCompareFunc(this.funcBack);\r\n other.setReference(this.ref);\r\n other.setReadMask(this.readMask);\r\n return other;\r\n }\r\n get failOp() {\r\n return stencilOpInvMap[this._failOp];\r\n }\r\n set failOp(val: StencilOp) {\r\n this._failOp = stencilOpMap[val];\r\n }\r\n get failOpBack() {\r\n return stencilOpInvMap[this._failOpBack];\r\n }\r\n set failOpBack(val: StencilOp) {\r\n this._failOpBack = stencilOpMap[val];\r\n }\r\n get zFailOp() {\r\n return stencilOpInvMap[this._zFailOp];\r\n }\r\n set zFailOp(val: StencilOp) {\r\n this._zFailOp = stencilOpMap[val];\r\n }\r\n get zFailOpBack() {\r\n return stencilOpInvMap[this._zFailOpBack];\r\n }\r\n set zFailOpBack(val: StencilOp) {\r\n this._zFailOpBack = stencilOpMap[val];\r\n }\r\n get passOp() {\r\n return stencilOpInvMap[this._passOp];\r\n }\r\n set passOp(val: StencilOp) {\r\n this._passOp = stencilOpMap[val];\r\n }\r\n get passOpBack() {\r\n return stencilOpInvMap[this._passOpBack];\r\n }\r\n set passOpBack(val: StencilOp) {\r\n this._passOpBack = stencilOpMap[val];\r\n }\r\n get func() {\r\n return compareFuncInvMap[this._func]!;\r\n }\r\n set func(val: CompareFunc) {\r\n this._func = compareFuncMap[val];\r\n }\r\n get funcBack() {\r\n return compareFuncInvMap[this._funcBack]!;\r\n }\r\n set funcBack(val: CompareFunc) {\r\n this._funcBack = compareFuncMap[val];\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n setWriteMask(mask: number) {\r\n this.writeMask = mask;\r\n return this;\r\n }\r\n setFrontOp(fail: StencilOp, zfail: StencilOp, zpass: StencilOp) {\r\n this.failOp = fail;\r\n this.zFailOp = zfail;\r\n this.passOp = zpass;\r\n return this;\r\n }\r\n setBackOp(fail: StencilOp, zfail: StencilOp, zpass: StencilOp) {\r\n this.failOpBack = fail;\r\n this.zFailOpBack = zfail;\r\n this.passOpBack = zpass;\r\n return this;\r\n }\r\n setFrontCompareFunc(func: CompareFunc) {\r\n this.func = func;\r\n return this;\r\n }\r\n setBackCompareFunc(func: CompareFunc) {\r\n this.funcBack = func;\r\n return this;\r\n }\r\n setReference(ref: number) {\r\n this.ref = ref;\r\n return this;\r\n }\r\n setReadMask(mask: number) {\r\n this.readMask = mask;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.enabled) {\r\n gl.enable(WebGLEnum.STENCIL_TEST);\r\n gl.stencilMaskSeparate(WebGLEnum.FRONT, this.writeMask);\r\n gl.stencilMaskSeparate(WebGLEnum.BACK, this.writeMask);\r\n gl.stencilFuncSeparate(WebGLEnum.FRONT, this._func, this.ref, this.readMask);\r\n gl.stencilFuncSeparate(WebGLEnum.BACK, this._funcBack, this.ref, this.readMask);\r\n gl.stencilOpSeparate(WebGLEnum.FRONT, this._failOp, this._zFailOp, this._passOp);\r\n gl.stencilOpSeparate(WebGLEnum.BACK, this._failOpBack, this._zFailOpBack, this._passOpBack);\r\n } else {\r\n gl.disable(WebGLEnum.STENCIL_TEST);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLRenderStateSet implements RenderStateSet {\r\n private readonly _gl: WebGLContext;\r\n colorState: Nullable<WebGLColorState>;\r\n blendingState: Nullable<WebGLBlendingState>;\r\n rasterizerState: Nullable<WebGLRasterizerState>;\r\n depthState: Nullable<WebGLDepthState>;\r\n stencilState: Nullable<WebGLStencilState>;\r\n constructor(gl: WebGLContext) {\r\n this._gl = gl;\r\n this.colorState = null;\r\n this.blendingState = null;\r\n this.rasterizerState = null;\r\n this.depthState = null;\r\n this.stencilState = null;\r\n }\r\n clone() {\r\n const newStateSet = new WebGLRenderStateSet(this._gl);\r\n newStateSet.colorState = (this.colorState?.clone() as WebGLColorState) ?? null;\r\n newStateSet.blendingState = (this.blendingState?.clone() as WebGLBlendingState) ?? null;\r\n newStateSet.rasterizerState = (this.rasterizerState?.clone() as WebGLRasterizerState) ?? null;\r\n newStateSet.depthState = (this.depthState?.clone() as WebGLDepthState) ?? null;\r\n newStateSet.stencilState = (this.stencilState?.clone() as WebGLStencilState) ?? null;\r\n return newStateSet;\r\n }\r\n copyFrom(stateSet: RenderStateSet) {\r\n this.colorState = stateSet.colorState as WebGLColorState;\r\n this.blendingState = stateSet.blendingState as WebGLBlendingState;\r\n this.rasterizerState = stateSet.rasterizerState as WebGLRasterizerState;\r\n this.depthState = stateSet.depthState as WebGLDepthState;\r\n this.stencilState = stateSet.stencilState as WebGLStencilState;\r\n }\r\n apply(force?: boolean) {\r\n const gl = this._gl;\r\n if (this.colorState) {\r\n this.colorState.apply(gl, force);\r\n } else {\r\n WebGLColorState.applyDefaults(gl, force);\r\n }\r\n if (this.blendingState) {\r\n this.blendingState.apply(gl, force);\r\n } else {\r\n WebGLBlendingState.applyDefaults(gl, force);\r\n }\r\n if (this.rasterizerState) {\r\n this.rasterizerState.apply(gl, force);\r\n } else {\r\n WebGLRasterizerState.applyDefaults(gl, force);\r\n }\r\n if (this.depthState) {\r\n this.depthState.apply(gl, force);\r\n } else {\r\n WebGLDepthState.applyDefaults(gl, force);\r\n }\r\n if (this.stencilState) {\r\n this.stencilState.apply(gl, force);\r\n } else {\r\n WebGLStencilState.applyDefaults(gl, force);\r\n }\r\n }\r\n useColorState(state?: ColorState) {\r\n return (this.colorState = (state as WebGLColorState) ?? this.colorState ?? new WebGLColorState());\r\n }\r\n defaultColorState() {\r\n this.colorState = null;\r\n }\r\n useBlendingState(state?: BlendingState) {\r\n return (this.blendingState =\r\n (state as WebGLBlendingState) ?? this.blendingState ?? new WebGLBlendingState());\r\n }\r\n defaultBlendingState() {\r\n this.blendingState = null;\r\n }\r\n useRasterizerState(state?: RasterizerState) {\r\n return (this.rasterizerState =\r\n (state as WebGLRasterizerState) ?? this.rasterizerState ?? new WebGLRasterizerState());\r\n }\r\n defaultRasterizerState() {\r\n this.rasterizerState = null;\r\n }\r\n useDepthState(state?: DepthState) {\r\n return (this.depthState = (state as WebGLDepthState) ?? this.depthState ?? new WebGLDepthState());\r\n }\r\n defaultDepthState() {\r\n this.depthState = null;\r\n }\r\n useStencilState(state?: StencilState) {\r\n return (this.stencilState = (state as WebGLStencilState) ?? this.stencilState ?? new WebGLStencilState());\r\n }\r\n defaultStencilState() {\r\n this.stencilState = null;\r\n }\r\n static applyDefaults(gl: WebGLContext, force?: boolean) {\r\n WebGLColorState.applyDefaults(gl, force);\r\n WebGLBlendingState.applyDefaults(gl, force);\r\n WebGLRasterizerState.applyDefaults(gl, force);\r\n WebGLDepthState.applyDefaults(gl, force);\r\n WebGLStencilState.applyDefaults(gl, force);\r\n }\r\n}\r\n","import { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { ITimer } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst GPU_DISJOINT_EXT = 0x8fbb;\r\nconst TIME_ELAPSED_EXT = 0x88bf;\r\n\r\nconst enum QueryState {\r\n QUERY_STATE_NONE = 0,\r\n QUERY_STATE_QUERYING = 1,\r\n QUERY_STATE_FINISHED = 2\r\n}\r\n\r\ninterface TimerQuery {\r\n createQuery: () => WebGLQuery;\r\n deleteQuery: (query: Nullable<WebGLQuery>) => void;\r\n isQuery: (query: Nullable<WebGLQuery>) => boolean;\r\n beginQuery: (target: number, query: WebGLQuery) => void;\r\n endQuery: (target: number) => void;\r\n getQuery: (target: number, pname: number) => Nullable<WebGLQuery>;\r\n getQueryObject: (query: WebGLQuery, pname: number) => any;\r\n queryCounter: (query: WebGLQuery, target: number) => void;\r\n}\r\n\r\nexport class GPUTimer implements ITimer {\r\n private readonly _device: WebGLDevice;\r\n private readonly _query: Nullable<WebGLQuery>;\r\n private _state: QueryState;\r\n private readonly _timerQuery: Nullable<TimerQuery>;\r\n private _gpuTime: Nullable<number>;\r\n constructor(device: WebGLDevice) {\r\n this._device = device;\r\n this._state = QueryState.QUERY_STATE_NONE;\r\n this._timerQuery = null;\r\n this._gpuTime = null;\r\n const gl = this._device.context;\r\n if (isWebGL2(gl)) {\r\n const ext = gl.getExtension('EXT_disjoint_timer_query_webgl2');\r\n if (ext) {\r\n this._timerQuery = {\r\n createQuery: gl.createQuery.bind(gl),\r\n deleteQuery: gl.deleteQuery.bind(gl),\r\n beginQuery: gl.beginQuery.bind(gl),\r\n endQuery: gl.endQuery.bind(gl),\r\n isQuery: gl.isQuery.bind(gl),\r\n getQuery: gl.getQuery.bind(gl),\r\n getQueryObject: gl.getQueryParameter.bind(gl),\r\n queryCounter: ext.queryCounterEXT.bind(ext)\r\n };\r\n }\r\n } else {\r\n const ext = gl.getExtension('EXT_disjoint_timer_query');\r\n if (ext) {\r\n this._timerQuery = {\r\n createQuery: ext.createQueryEXT.bind(ext),\r\n deleteQuery: ext.deleteQueryEXT.bind(ext),\r\n beginQuery: ext.beginQueryEXT.bind(ext),\r\n endQuery: ext.endQueryEXT.bind(ext),\r\n isQuery: ext.isQueryEXT.bind(ext),\r\n getQuery: ext.getQueryEXT.bind(ext),\r\n getQueryObject: ext.getQueryObjectEXT.bind(ext),\r\n queryCounter: ext.queryCounterEXT.bind(ext)\r\n };\r\n }\r\n }\r\n this._query = this._timerQuery ? this._timerQuery.createQuery() : null;\r\n }\r\n get gpuTimerSupported() {\r\n return !!this._query;\r\n }\r\n begin() {\r\n if (this._state === QueryState.QUERY_STATE_QUERYING) {\r\n this.end();\r\n }\r\n if (this._timerQuery && this._query) {\r\n this._timerQuery.beginQuery(TIME_ELAPSED_EXT, this._query);\r\n }\r\n this._gpuTime = null;\r\n this._state = QueryState.QUERY_STATE_QUERYING;\r\n }\r\n end() {\r\n if (this._state === QueryState.QUERY_STATE_QUERYING) {\r\n if (this._timerQuery) {\r\n this._timerQuery!.endQuery(TIME_ELAPSED_EXT);\r\n }\r\n this._state = QueryState.QUERY_STATE_FINISHED;\r\n }\r\n }\r\n ended() {\r\n return this._state !== QueryState.QUERY_STATE_QUERYING;\r\n }\r\n elapsed() {\r\n if (this._state === QueryState.QUERY_STATE_FINISHED) {\r\n if (\r\n this._gpuTime === null &&\r\n this._query &&\r\n this._timerQuery &&\r\n this._timerQuery.getQueryObject(this._query, WebGLEnum.QUERY_RESULT_AVAILABLE)\r\n ) {\r\n const gpuTimerDisjoint = this._device.context.getParameter(GPU_DISJOINT_EXT);\r\n if (!gpuTimerDisjoint) {\r\n this._gpuTime =\r\n Number(this._timerQuery.getQueryObject(this._query, WebGLEnum.QUERY_RESULT)) / 1000000;\r\n }\r\n }\r\n }\r\n return this._gpuTime ?? 0;\r\n }\r\n}\r\n","import { WebGLEnum } from './webgl_enum';\r\nimport { isWebGL2 } from './utils';\r\nimport type {\r\n WebGLContext,\r\n TextureFormat,\r\n FramebufferCaps,\r\n MiscCaps,\r\n ShaderCaps,\r\n TextureCaps,\r\n TextureFormatInfo\r\n} from '@zephyr3d/device';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\n\r\nexport interface TextureParams {\r\n target: number;\r\n format: number;\r\n internalFormat: number;\r\n type: number;\r\n filterable: boolean;\r\n renderable: boolean;\r\n repeatable: boolean;\r\n compressed: boolean;\r\n generateMipmap: boolean;\r\n}\r\n\r\n/*********************************************************************************************************************\r\n * Unsized Internal Formats\r\n * --------------------------------------------------------------------------------------------\r\n * GL_RGB | GL_RGB | GL_UNSIGNED_BYTE\r\n * | | GL_UNSIGNED_SHORT_5_6_5\r\n * --------------------------------------------------------------------------------------------\r\n * GL_RGBA | GL_RGBA | GL_UNSIGNED_BYTE\r\n * | | GL_UNSIGNED_SHORT_4_4_4_4\r\n * | | GL_UNSIGNED_SHORT_5_5_5_1\r\n * --------------------------------------------------------------------------------------------\r\n * GL_LUMINANCE_ALPHA | GL_LUMINANCE_ALPHA | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n * GL_LUMINANCE | GL_LUMINANCE | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n * GL_ALPHA | GL_ALPHA | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n *\r\n *\r\n * Sized Internal Formats\r\n * ------------------------------------------------------------------------------------------------------\r\n * Sized Internal Format | Format | Type | Renderable | Filterable\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8 | GL_RED | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8_SNORM | GL_RED | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16F | GL_RED | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32F | GL_RED | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8UI | GL_RED_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8I | GL_RED_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16UI | GL_RED_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16I | GL_RED_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32UI | GL_RED_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32I | GL_RED_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8 | GL_RG | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8_SNORM | GL_RG | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16F | GL_RG | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32F | GL_RG | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8UI | GL_RG_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8I | GL_RG_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16UI | GL_RG_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16I | GL_RG_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32UI | GL_RG_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32I | GL_RG_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8 | GL_RGB | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_SRGB8 | GL_RGB | GL_UNSIGNED_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB565 | GL_RGB | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_5_6_5 | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8_SNORM | GL_RGB | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R11F_G11F_B10F | GL_RGB | GL_UNSIGNED_INT_10F_11F_11F_REV | No | Yes\r\n * | | GL_HALF_FLOAT | |\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB9_E5 | GL_RGB | GL_UNSIGNED_INT_5_9_9_9_REV | No | Yes\r\n * | | GL_HALF_FLOAT | |\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16F | GL_RGB | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32F | GL_RGB | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8UI | GL_RGB_INTEGER | GL_UNSIGNED_BYTE | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8I | GL_RGB_INTEGER | GL_BYTE | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16UI | GL_RGB_INTEGER | GL_UNSIGNED_SHORT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16I | GL_RGB_INTEGER | GL_SHORT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32UI | GL_RGB_INTEGER | GL_UNSIGNED_INT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32I | GL_RGB_INTEGER | GL_INT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_SRGB8_ALPHA8 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8_SNORM | GL_RGBA | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB5_A1 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_5_5_5_1 | |\r\n * | | GL_UNSIGNED_INT_2_10_10_10_REV | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA4 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_4_4_4_4 | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB10_A2 | GL_RGBA | GL_UNSIGNED_INT_2_10_10_10_REV | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16F | GL_RGBA | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32F | GL_RGBA | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8UI | GL_RGBA_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8I | GL_RGBA_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16UI | GL_RGBA_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16I | GL_RGBA_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32UI | GL_RGBA_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32I | GL_RGBA_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT16 | GL_DEPTH_COMPONENT | GL_UNSIGNED_SHORT | N/A | N/A\r\n * | | GL_UNSIGNED_INT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT24 | GL_DEPTH_COMPONENT | GL_UNSIGNED_INT | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT32F | GL_DEPTH_COMPONENT | GL_FLOAT | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH24_STENCIL8 | GL_DEPTH_STENCIL | GL_UNSIGNED_INT_24_8 | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH32F_STENCIL8 | GL_DEPTH_STENCIL | GL_FLOAT_32_UNSIGNED_INT_24_8_REV | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n *********************************************************************************************************************/\r\n\r\nexport interface TextureFormatInfoWebGL extends TextureFormatInfo {\r\n glFormat: number;\r\n glInternalFormat: number;\r\n glType: number[];\r\n}\r\n\r\nexport class WebGLFramebufferCaps implements FramebufferCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extDrawBuffers: Nullable<WEBGL_draw_buffers>;\r\n private readonly _extFloatBlending: Nullable<EXT_float_blend>;\r\n private readonly _extRenderMipmap: Nullable<OES_fbo_render_mipmap>;\r\n maxDrawBuffers: number;\r\n maxColorAttachmentBytesPerSample: number;\r\n supportRenderMipmap: boolean;\r\n supportMultisampledFramebuffer: boolean;\r\n supportFloatBlending: boolean;\r\n supportDepth32float: boolean;\r\n supportDepth32floatStencil8: boolean;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extDrawBuffers = this._isWebGL2 ? null : gl.getExtension('WEBGL_draw_buffers');\r\n this._extFloatBlending = gl.getExtension('EXT_float_blend');\r\n this._extRenderMipmap = this._isWebGL2 ? null : gl.getExtension('OES_fbo_render_mipmap');\r\n this.maxDrawBuffers =\r\n this._isWebGL2 || this._extDrawBuffers\r\n ? Math.min(\r\n gl.getParameter(WebGLEnum.MAX_COLOR_ATTACHMENTS),\r\n gl.getParameter(WebGLEnum.MAX_DRAW_BUFFERS)\r\n )\r\n : 1;\r\n this.maxColorAttachmentBytesPerSample = this.maxDrawBuffers * 16;\r\n this.supportRenderMipmap = isWebGL2(gl) || !!this._extRenderMipmap;\r\n this.supportMultisampledFramebuffer = isWebGL2(gl);\r\n this.supportFloatBlending = !!this._extFloatBlending;\r\n this.supportDepth32float = this._isWebGL2;\r\n this.supportDepth32floatStencil8 = this._isWebGL2;\r\n }\r\n}\r\n\r\nexport class WebGLMiscCaps implements MiscCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extIndexUint32: Nullable<OES_element_index_uint>;\r\n private readonly _extBlendMinMax: Nullable<EXT_blend_minmax>;\r\n supportOversizedViewport: boolean;\r\n supportBlendMinMax: boolean;\r\n support32BitIndex: boolean;\r\n supportDepthClamp: boolean;\r\n maxBindGroups: number;\r\n maxTexCoordIndex: number;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extBlendMinMax = null;\r\n this._extIndexUint32 = this._isWebGL2 ? gl.getExtension('OES_element_index_uint') : null;\r\n if (this._isWebGL2) {\r\n this.supportBlendMinMax = true;\r\n this.support32BitIndex = true;\r\n } else {\r\n this._extBlendMinMax = gl.getExtension('EXT_blend_minmax');\r\n this.supportBlendMinMax = !!this._extBlendMinMax;\r\n this.support32BitIndex = !!this._extIndexUint32;\r\n }\r\n this.supportOversizedViewport = true;\r\n this.supportDepthClamp = false;\r\n this.maxBindGroups = 4;\r\n this.maxTexCoordIndex = 8;\r\n }\r\n}\r\nexport class WebGLShaderCaps implements ShaderCaps {\r\n private readonly _extFragDepth: Nullable<EXT_frag_depth>;\r\n private readonly _extStandardDerivatives: Nullable<OES_standard_derivatives>;\r\n private readonly _extShaderTextureLod: Nullable<EXT_shader_texture_lod>;\r\n supportFragmentDepth: boolean;\r\n supportStandardDerivatives: boolean;\r\n supportShaderTextureLod: boolean;\r\n supportHighPrecisionFloat: boolean;\r\n maxUniformBufferSize: number;\r\n uniformBufferOffsetAlignment: number;\r\n maxStorageBufferSize: number;\r\n storageBufferOffsetAlignment: number;\r\n constructor(gl: WebGLContext) {\r\n this._extFragDepth = null;\r\n this._extStandardDerivatives = null;\r\n this._extShaderTextureLod = null;\r\n this.maxStorageBufferSize = 0;\r\n this.storageBufferOffsetAlignment = 0;\r\n if (isWebGL2(gl)) {\r\n this.supportFragmentDepth = true;\r\n this.supportStandardDerivatives = true;\r\n this.supportShaderTextureLod = true;\r\n this.supportHighPrecisionFloat = true;\r\n this.maxUniformBufferSize = gl.getParameter(gl.MAX_UNIFORM_BLOCK_SIZE) || 16384;\r\n this.uniformBufferOffsetAlignment = gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT) || 256;\r\n } else {\r\n this._extFragDepth = gl.getExtension('EXT_frag_depth');\r\n this.supportFragmentDepth = !!this._extFragDepth;\r\n this._extStandardDerivatives = gl.getExtension('OES_standard_derivatives');\r\n this.supportStandardDerivatives = !!this._extStandardDerivatives;\r\n this._extShaderTextureLod = gl.getExtension('EXT_shader_texture_lod');\r\n this.supportShaderTextureLod = !!this._extShaderTextureLod;\r\n this.supportHighPrecisionFloat =\r\n gl.getShaderPrecisionFormat &&\r\n !!gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT)?.precision &&\r\n !!gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT)?.precision;\r\n this.maxUniformBufferSize = 0;\r\n this.uniformBufferOffsetAlignment = 1;\r\n }\r\n }\r\n}\r\nexport class WebGLTextureCaps implements TextureCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extS3TC: Nullable<WEBGL_compressed_texture_s3tc>;\r\n private readonly _extS3TCSRGB: Nullable<WEBGL_compressed_texture_s3tc_srgb>;\r\n private readonly _extBPTC: Nullable<EXT_texture_compression_bptc>;\r\n private readonly _extRGTC: Nullable<EXT_texture_compression_rgtc>;\r\n private readonly _extASTC: Nullable<WEBGL_compressed_texture_astc>;\r\n private readonly _extTextureFilterAnisotropic: Nullable<EXT_texture_filter_anisotropic>;\r\n private readonly _extDepthTexture: Nullable<WEBGL_depth_texture>;\r\n private readonly _extSRGB: Nullable<EXT_sRGB>;\r\n private readonly _extTextureFloat: Nullable<OES_texture_float>;\r\n private readonly _extTextureFloatLinear: Nullable<OES_texture_float_linear>;\r\n private readonly _extTextureHalfFloat: Nullable<OES_texture_half_float>;\r\n private readonly _extTextureHalfFloatLinear: Nullable<OES_texture_half_float_linear>;\r\n private readonly _textureFormatInfos: Record<TextureFormat, TextureFormatInfoWebGL>;\r\n maxTextureSize: number;\r\n maxCubeTextureSize: number;\r\n npo2Mipmapping: boolean;\r\n npo2Repeating: boolean;\r\n supportS3TC: boolean;\r\n supportS3TCSRGB: boolean;\r\n supportBPTC: boolean;\r\n supportRGTC: boolean;\r\n supportASTC: boolean;\r\n supportDepthTexture: boolean;\r\n support3DTexture: boolean;\r\n supportSRGBTexture: boolean;\r\n supportFloatTexture: boolean;\r\n supportLinearFloatTexture: boolean;\r\n supportHalfFloatTexture: boolean;\r\n supportLinearHalfFloatTexture: boolean;\r\n supportAnisotropicFiltering: boolean;\r\n supportFloatColorBuffer: boolean;\r\n supportHalfFloatColorBuffer: boolean;\r\n supportFloatBlending: boolean;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extTextureFilterAnisotropic =\r\n gl.getExtension('EXT_texture_filter_anisotropic') ||\r\n gl.getExtension('MOZ_EXT_texture_filter_anisotropic') ||\r\n gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\r\n this.supportAnisotropicFiltering = !!this._extTextureFilterAnisotropic;\r\n if (this._isWebGL2) {\r\n this._extDepthTexture = null;\r\n this.supportDepthTexture = true;\r\n } else {\r\n this._extDepthTexture = gl.getExtension('WEBGL_depth_texture');\r\n this.supportDepthTexture = !!this._extDepthTexture;\r\n }\r\n this.support3DTexture = this._isWebGL2;\r\n this._extSRGB = this._isWebGL2 ? null : gl.getExtension('EXT_sRGB');\r\n this.supportSRGBTexture = this._isWebGL2 || !!this._extSRGB;\r\n if (this._isWebGL2) {\r\n this._extTextureFloat = null;\r\n this.supportFloatTexture = true;\r\n } else {\r\n this._extTextureFloat = gl.getExtension('OES_texture_float');\r\n this.supportFloatTexture = !!this._extTextureFloat;\r\n }\r\n this._extTextureFloatLinear = gl.getExtension('OES_texture_float_linear');\r\n this.supportLinearFloatTexture = !!this._extTextureFloatLinear;\r\n if (this._isWebGL2) {\r\n this._extTextureHalfFloat = null;\r\n this.supportHalfFloatTexture = true;\r\n this._extTextureHalfFloatLinear = null;\r\n this.supportLinearHalfFloatTexture = true;\r\n } else {\r\n this._extTextureHalfFloat = gl.getExtension('OES_texture_half_float');\r\n this.supportHalfFloatTexture = !!this._extTextureHalfFloat;\r\n this._extTextureHalfFloatLinear = gl.getExtension('OES_texture_half_float_linear');\r\n this.supportLinearHalfFloatTexture = !!this._extTextureHalfFloatLinear;\r\n }\r\n\r\n if (this._isWebGL2) {\r\n if (gl.getExtension('EXT_color_buffer_float')) {\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatColorBuffer = true;\r\n } else if (gl.getExtension('EXT_color_buffer_half_float')) {\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatColorBuffer = false;\r\n } else {\r\n this.supportHalfFloatColorBuffer = false;\r\n this.supportFloatColorBuffer = false;\r\n }\r\n } else {\r\n this.supportFloatColorBuffer = !!gl.getExtension('WEBGL_color_buffer_float');\r\n this.supportHalfFloatColorBuffer = !!gl.getExtension('EXT_color_buffer_half_float');\r\n }\r\n this.supportFloatBlending = this.supportFloatColorBuffer && !!gl.getExtension('EXT_float_blend');\r\n\r\n this._extS3TC =\r\n gl.getExtension('WEBGL_compressed_texture_s3tc') ||\r\n gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||\r\n gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');\r\n this.supportS3TC = !!this._extS3TC;\r\n this._extS3TCSRGB = gl.getExtension('WEBGL_compressed_texture_s3tc_srgb');\r\n this.supportS3TCSRGB = !!this._extS3TCSRGB;\r\n this._extBPTC = gl.getExtension('EXT_texture_compression_bptc');\r\n this.supportBPTC = !!this._extBPTC;\r\n this._extRGTC = gl.getExtension('EXT_texture_compression_rgtc');\r\n this.supportRGTC = !!this._extRGTC;\r\n this._extASTC = gl.getExtension('WEBGL_compressed_texture_astc');\r\n this.supportASTC = !!this._extASTC;\r\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n this.maxCubeTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\r\n if (this._isWebGL2) {\r\n this.npo2Mipmapping = true;\r\n this.npo2Repeating = true;\r\n } else {\r\n this.npo2Mipmapping = false;\r\n this.npo2Repeating = false;\r\n }\r\n this._textureFormatInfos = {\r\n rgba8unorm: {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: this._isWebGL2 ? (gl as WebGL2RenderingContext).RGBA8 : gl.RGBA,\r\n glType: [gl.UNSIGNED_BYTE, gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n }\r\n } as Record<TextureFormat, TextureFormatInfoWebGL>;\r\n if (this._extASTC) {\r\n for (const k of [\r\n '4x4',\r\n '5x4',\r\n '5x5',\r\n '6x5',\r\n '6x6',\r\n '8x5',\r\n '8x6',\r\n '8x8',\r\n '10x5',\r\n '10x6',\r\n '10x8',\r\n '10x10',\r\n '12x10',\r\n '12x12'\r\n ]) {\r\n const [w, h] = k.split('x').map((val) => Number(val));\r\n this._textureFormatInfos[`astc-${k}` as keyof typeof this._textureFormatInfos] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extASTC[\r\n `COMPRESSED_RGBA_ASTC_${k}_KHR` as keyof typeof this._extASTC\r\n ] as number,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n this._textureFormatInfos[`astc-${k}-srgb` as keyof typeof this._textureFormatInfos] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extASTC[\r\n `COMPRESSED_SRGB8_ALPHA8_ASTC_${k}_KHR` as keyof typeof this._extASTC\r\n ] as number,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n }\r\n }\r\n if (this._extS3TC) {\r\n this._textureFormatInfos['dxt1'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGBA_S3TC_DXT3_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extS3TCSRGB) {\r\n this._textureFormatInfos['dxt1-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_S3TC_DXT1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extRGTC) {\r\n this._textureFormatInfos['bc4'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_RED_RGTC1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc4-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_SIGNED_RED_RGTC1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_RED_GREEN_RGTC2_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extBPTC) {\r\n this._textureFormatInfos['bc6h'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc6h-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (isWebGL2(gl)) {\r\n this._textureFormatInfos['r8unorm'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8snorm'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16f'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32f'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r8ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r16i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r32i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg8unorm'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8snorm'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16f'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32f'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg8ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg16i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg32i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.SRGB8_ALPHA8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8snorm'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba8ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba16i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba32i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rg11b10uf'] = {\r\n glFormat: gl.RGB,\r\n glInternalFormat: gl.R11F_G11F_B10F,\r\n glType: [gl.UNSIGNED_INT_10F_11F_11F_REV],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d16'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT16,\r\n glType: [gl.UNSIGNED_SHORT, gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT24,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32f'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT32F,\r\n glType: [gl.FLOAT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH24_STENCIL8,\r\n glType: [gl.UNSIGNED_INT_24_8],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32fs8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH32F_STENCIL8,\r\n glType: [gl.FLOAT_32_UNSIGNED_INT_24_8_REV],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n } else {\r\n if (this.supportFloatTexture) {\r\n this._textureFormatInfos['rgba32f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA,\r\n glType: [gl.FLOAT, gl.UNSIGNED_BYTE, gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n }\r\n if (this.supportHalfFloatTexture) {\r\n this._textureFormatInfos['rgba16f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA,\r\n glType: [\r\n WebGLEnum.HALF_FLOAT,\r\n gl.UNSIGNED_BYTE,\r\n gl.UNSIGNED_SHORT_4_4_4_4,\r\n gl.UNSIGNED_SHORT_5_5_5_1\r\n ],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n }\r\n if (this.supportSRGBTexture) {\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n glFormat: WebGLEnum.SRGB_ALPHA,\r\n glInternalFormat: WebGLEnum.SRGB_ALPHA,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n }\r\n if (this.supportDepthTexture) {\r\n this._textureFormatInfos['d16'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH_STENCIL,\r\n glType: [WebGLEnum.UNSIGNED_INT_24_8],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n }\r\n }\r\n }\r\n calcMemoryUsage(format: TextureFormat, type: number, numPixels: number) {\r\n switch (format) {\r\n case 'd16':\r\n case 'd24':\r\n case 'd24s8':\r\n case 'd32f':\r\n switch (type) {\r\n case WebGLEnum.UNSIGNED_SHORT:\r\n return numPixels * 2;\r\n default:\r\n return numPixels * 4;\r\n }\r\n case 'd32fs8':\r\n return numPixels * 8;\r\n case 'dxt1':\r\n case 'dxt1-srgb':\r\n return numPixels / 2;\r\n case 'dxt3':\r\n case 'dxt3-srgb':\r\n case 'dxt5':\r\n case 'dxt5-srgb':\r\n return numPixels;\r\n case 'r16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 2;\r\n default:\r\n return numPixels * 4;\r\n }\r\n case 'r16i':\r\n case 'r16ui':\r\n return numPixels * 2;\r\n case 'r32f':\r\n case 'r32i':\r\n case 'r32ui':\r\n return numPixels * 4;\r\n case 'r8unorm':\r\n case 'r8snorm':\r\n case 'r8i':\r\n case 'r8ui':\r\n return numPixels;\r\n case 'rg16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 4;\r\n default:\r\n return numPixels * 8;\r\n }\r\n case 'rg16i':\r\n case 'rg16ui':\r\n return numPixels * 4;\r\n case 'rg32f':\r\n case 'rg32i':\r\n case 'rg32ui':\r\n return numPixels * 8;\r\n case 'rg8unorm':\r\n case 'rg8snorm':\r\n case 'rg8i':\r\n case 'rg8ui':\r\n return numPixels * 2;\r\n case 'rgba16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 8;\r\n default:\r\n return numPixels * 16;\r\n }\r\n case 'rgba16i':\r\n case 'rgba16ui':\r\n return numPixels * 8;\r\n case 'rgba32f':\r\n case 'rgba32i':\r\n case 'rgba32ui':\r\n return numPixels * 16;\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n case 'rgba8snorm':\r\n case 'rgba8i':\r\n case 'rgba8ui':\r\n return numPixels * 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfoWebGL> {\r\n return this._textureFormatInfos[format];\r\n }\r\n}\r\n","import { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { StructuredBuffer, StructuredValue, PBTypeInfo, PBStructTypeInfo } from '@zephyr3d/device';\r\nimport { StructuredBufferData, GPUResourceUsageFlags, PBPrimitiveType } from '@zephyr3d/device';\r\nimport type { Immutable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLStructuredBuffer extends WebGLGPUBuffer implements StructuredBuffer {\r\n private _structure: PBStructTypeInfo;\r\n private _data: StructuredBufferData;\r\n constructor(\r\n device: WebGLDevice,\r\n structure: Immutable<PBStructTypeInfo>,\r\n usage: number,\r\n source?: TypedArray\r\n ) {\r\n if (!structure?.isStructType()) {\r\n throw new Error('invalid structure type');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('structured buffer must not have Index usage flag');\r\n }\r\n if (\r\n usage &\r\n (GPUResourceUsageFlags.BF_READ |\r\n GPUResourceUsageFlags.BF_WRITE |\r\n GPUResourceUsageFlags.BF_PACK_PIXEL |\r\n GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n throw new Error('structured buffer must not have Read or Write usage flags');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n if (structure.structMembers.length !== 1 || !structure.structMembers[0].type.isArrayType()) {\r\n throw new Error('structured buffer for vertex usage must have only one array member');\r\n }\r\n if (!WebGLStructuredBuffer.isValidArrayElementType(structure.structMembers[0].type.elementType)) {\r\n throw new Error('invalid vertex data type when creating vertex buffer');\r\n }\r\n }\r\n const layout = structure.toBufferLayout(0, structure.layout);\r\n if (source && layout.byteSize !== source.byteLength) {\r\n throw new Error(\r\n `create structured buffer failed: invalid source size: ${source.byteLength}, should be ${layout.byteSize}`\r\n );\r\n }\r\n const useSystemMemory = !device.isWebGL2 && (usage & GPUResourceUsageFlags.BF_UNIFORM) !== 0;\r\n super(device, usage, source || layout.byteSize, useSystemMemory);\r\n this._data = new StructuredBufferData(layout, useSystemMemory ? this.systemMemoryBuffer : this);\r\n this._structure = structure;\r\n }\r\n set(name: string, value: StructuredValue) {\r\n this._data.set(name, value);\r\n }\r\n get structure(): Immutable<PBStructTypeInfo> {\r\n return this._structure;\r\n }\r\n set structure(st: PBStructTypeInfo) {\r\n if (st && !st.isCompatibleType(this._structure)) {\r\n const layout = st.toBufferLayout(0, st.layout);\r\n if (layout.byteSize > this.byteLength) {\r\n throw new Error(`set structure type failed: new structure type is too large: ${layout.byteSize}`);\r\n }\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = st;\r\n }\r\n }\r\n getUniformData() {\r\n return this._data;\r\n }\r\n private static isValidArrayElementType(type: PBTypeInfo) {\r\n if (type.isPrimitiveType()) {\r\n return type.scalarType !== PBPrimitiveType.BOOL && !type.isMatrixType();\r\n } else if (type.isStructType()) {\r\n for (const member of type.structMembers) {\r\n if (\r\n !member.type.isPrimitiveType() ||\r\n member.type.scalarType === PBPrimitiveType.BOOL ||\r\n member.type.isMatrixType()\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import type {\r\n StructuredValue,\r\n PBStructTypeInfo,\r\n BindGroupLayout,\r\n BaseTexture,\r\n TextureSampler,\r\n BindGroup,\r\n BindGroupLayoutEntry,\r\n GPUDataBuffer\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLStructuredBuffer } from './structuredbuffer_webgl';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLGPUProgram } from './gpuprogram_webgl';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { Immutable, Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\n\r\nexport class WebGLBindGroup extends WebGLGPUObject<unknown> implements BindGroup {\r\n private readonly _layout: Immutable<BindGroupLayout>;\r\n private _dynamicOffsets: Nullable<number[]>;\r\n private _resources: Record<string, WebGLGPUBuffer | [WebGLBaseTexture, WebGLTextureSampler]>;\r\n private _createdBuffers: WebGLGPUBuffer[];\r\n constructor(device: WebGLDevice, layout: Immutable<BindGroupLayout>) {\r\n super(device);\r\n this._device = device;\r\n this._layout = layout;\r\n this._dynamicOffsets = null;\r\n this._resources = {};\r\n this._object = {};\r\n this._createdBuffers = [];\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.buffer.hasDynamicOffset) {\r\n if (!this._dynamicOffsets) {\r\n this._dynamicOffsets = [];\r\n }\r\n this._dynamicOffsets[entry.buffer.dynamicOffsetIndex] = 0;\r\n }\r\n }\r\n }\r\n getGPUId() {\r\n return String(this._uid);\r\n }\r\n getLayout(): Immutable<BindGroupLayout> {\r\n return this._layout;\r\n }\r\n getBuffer(name: string, nocreate = true) {\r\n return this._getBuffer(name, nocreate);\r\n }\r\n getDynamicOffsets(): Nullable<Immutable<number[]>> {\r\n return this._dynamicOffsets;\r\n }\r\n setBuffer(name: string, buffer: GPUDataBuffer, offset?: number, _bindOffset?: number, _bindSize?: number) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.name === bindName) {\r\n if (!entry.buffer) {\r\n console.error(`setBuffer() failed: resource '${name}' is not buffer`);\r\n } else {\r\n if (buffer && !(buffer.usage & GPUResourceUsageFlags.BF_UNIFORM)) {\r\n console.error(\r\n `setBuffer() failed: buffer resource '${name}' must be type '${entry.buffer.type}'`\r\n );\r\n } else if (buffer !== this._resources[entry.name]) {\r\n this._resources[entry.name] = buffer as WebGLGPUBuffer;\r\n }\r\n if (entry.buffer.hasDynamicOffset) {\r\n this._dynamicOffsets![entry.buffer.dynamicOffsetIndex] = offset ?? 0;\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n console.error(`setBuffer() failed: no buffer resource named '${name}'`);\r\n }\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setRawData(mappedName, byteOffset, data, srcPos, srcLength);\r\n } else {\r\n const buffer = this._getBuffer(name, false);\r\n if (buffer) {\r\n buffer.bufferSubData(byteOffset, data, srcPos, srcLength);\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setValue(name: string, value: StructuredValue) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setValue(mappedName, { [name]: value });\r\n } else {\r\n const buffer = this._getBuffer(name, false);\r\n if (buffer) {\r\n if (!(buffer instanceof WebGLStructuredBuffer)) {\r\n throw new Error(`BindGroup.setValue() failed: '${name}' is not structured buffer`);\r\n }\r\n if (typeof value === 'number') {\r\n throw new Error(`BindGroup.setValue() failed: cannot set ${value} to '${name}'`);\r\n }\r\n if ('BYTES_PER_ELEMENT' in value) {\r\n buffer.bufferSubData(0, value as TypedArray);\r\n } else {\r\n for (const k in value) {\r\n buffer.set(k, value[k]);\r\n }\r\n }\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setTextureView(\r\n _name: string,\r\n _value: BaseTexture,\r\n _level?: number,\r\n _face?: number,\r\n _mipCount?: number,\r\n _sampler?: Nullable<TextureSampler>\r\n ) {\r\n throw new Error('setTextureView() not supported for webgl device');\r\n }\r\n getTexture(name: string): Nullable<BaseTexture> {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n return (this._resources[name] as [WebGLBaseTexture, WebGLTextureSampler])?.[0] || null;\r\n } else {\r\n throw new Error(`getTexture() failed:${name} is not a texture`);\r\n }\r\n }\r\n setTexture(name: string, texture: BaseTexture, sampler?: Nullable<TextureSampler>) {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n this._resources[name] = [\r\n texture as unknown as WebGLBaseTexture,\r\n (sampler ||\r\n texture.getDefaultSampler(!!entry.texture?.autoBindSamplerComparison)) as WebGLTextureSampler\r\n ];\r\n } else {\r\n console.error(`setTexture() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n setSampler(_name: string, _value: TextureSampler) {\r\n // no sampler uniform support for webgl\r\n }\r\n apply(program: WebGLGPUProgram, offsets?: Nullable<Iterable<number>>) {\r\n const webgl2 = this._device.isWebGL2;\r\n const dynamicOffsets = offsets ?? this.getDynamicOffsets();\r\n for (let i = 0; i < this._layout.entries.length; i++) {\r\n const entry = this._layout.entries[i];\r\n const res = this._resources[entry.name];\r\n if (res instanceof WebGLGPUBuffer) {\r\n if (webgl2) {\r\n if (entry.buffer!.hasDynamicOffset) {\r\n program.setBlock(\r\n (entry.type as PBStructTypeInfo).structName!,\r\n res,\r\n (dynamicOffsets! as number[])[entry.buffer!.dynamicOffsetIndex]\r\n );\r\n } else {\r\n program.setBlock((entry.type as PBStructTypeInfo).structName!, res, 0);\r\n }\r\n } else if (res instanceof WebGLStructuredBuffer) {\r\n program.setUniform(entry.name, res.getUniformData().uniforms);\r\n }\r\n } else if (Array.isArray(res)) {\r\n if (res[0].isTextureVideo()) {\r\n res[0].updateVideoFrame();\r\n }\r\n // res[0].sampler = res[1];\r\n program.setUniform(entry.name, res);\r\n }\r\n }\r\n }\r\n destroy() {\r\n this._resources = {};\r\n this._object = null;\r\n for (const buffer of this._createdBuffers) {\r\n buffer.dispose();\r\n }\r\n this._createdBuffers = [];\r\n }\r\n restore() {\r\n this._object = {};\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return true;\r\n }\r\n private _getBuffer(name: string, nocreate = false) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.name === bindName) {\r\n let buffer = this._resources[entry.name];\r\n if (!buffer && !nocreate) {\r\n buffer = this._device.createStructuredBuffer(entry.type as PBStructTypeInfo, {\r\n usage: 'uniform'\r\n }) as WebGLStructuredBuffer;\r\n this._resources[entry.name] = buffer;\r\n this._createdBuffers.push(buffer);\r\n }\r\n return buffer as GPUDataBuffer;\r\n }\r\n }\r\n return null;\r\n }\r\n private _findTextureLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if ((entry.texture || entry.storageTexture || entry.externalTexture) && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { PBStructTypeInfo, GPUProgram, BindGroupLayout, ShaderKind } from '@zephyr3d/device';\r\nimport { semanticList } from '@zephyr3d/device';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { Immutable, Nullable, TypedArrayConstructor } from '@zephyr3d/base';\r\n\r\ntype UniformBlockArray = Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float32Array<ArrayBuffer>;\r\nexport interface AttributeSetter {\r\n (value: WebGLGPUBuffer | number | Iterable<number>, offset?: number, stride?: number): void;\r\n location: number;\r\n}\r\n\r\nexport type IUniformValue = number | Iterable<number> | [WebGLBaseTexture, WebGLTextureSampler];\r\nexport type UniformSetter = (value: IUniformValue) => unknown;\r\n\r\ninterface ProgramUniformInfo {\r\n index: number;\r\n name: string;\r\n type: number;\r\n size: number;\r\n blockIndex: number;\r\n offset: number;\r\n isArray: boolean;\r\n viewCtor: TypedArrayConstructor<UniformBlockArray>;\r\n viewElementSize: number;\r\n view: Nullable<UniformBlockArray>;\r\n location: Nullable<WebGLUniformLocation>;\r\n}\r\n\r\ninterface ProgramBlockInfo {\r\n index: number;\r\n used: boolean;\r\n size: number;\r\n uniformIndices: Uint32Array<ArrayBuffer>;\r\n}\r\n\r\nexport class WebGLGPUProgram extends WebGLGPUObject<WebGLProgram> implements GPUProgram<WebGLProgram> {\r\n private readonly _vs: string;\r\n private readonly _fs: string;\r\n private _unitCounter: number;\r\n private _uniformSetters: Record<string, UniformSetter>;\r\n private _uniformInfo: Nullable<ProgramUniformInfo>[];\r\n private _blockInfo: Record<string, ProgramBlockInfo>;\r\n private readonly _bindGroupLayouts: BindGroupLayout[];\r\n private readonly _vertexAttributes: number[];\r\n private _error: Nullable<string>;\r\n private _vertexShader: Nullable<WebGLShader>;\r\n private _fragmentShader: Nullable<WebGLShader>;\r\n constructor(\r\n device: WebGLDevice,\r\n vertexShader: string,\r\n fragmentShader: string,\r\n bindGroupLayouts: BindGroupLayout[],\r\n vertexAttributes: number[]\r\n ) {\r\n super(device);\r\n this._object = this._device.context.createProgram();\r\n this._unitCounter = 0;\r\n this._uniformSetters = {};\r\n this._uniformInfo = [];\r\n this._blockInfo = {};\r\n this._error = '';\r\n this._vertexShader = null;\r\n this._fragmentShader = null;\r\n this._vs = vertexShader;\r\n this._fs = fragmentShader;\r\n this._bindGroupLayouts = [...bindGroupLayouts];\r\n this._vertexAttributes = [...vertexAttributes];\r\n this.load();\r\n }\r\n get type() {\r\n return 'render' as const;\r\n }\r\n getCompileError() {\r\n return this._error;\r\n }\r\n getShaderSource(kind: ShaderKind) {\r\n switch (kind) {\r\n case 'vertex':\r\n return this._vs;\r\n case 'fragment':\r\n return this._fs;\r\n default:\r\n return null;\r\n }\r\n }\r\n getBindingInfo(name: string) {\r\n for (let group = 0; group < this._bindGroupLayouts.length; group++) {\r\n const layout = this._bindGroupLayouts[group];\r\n const bindName = layout.nameMap?.[name] ?? name;\r\n for (let binding = 0; binding < layout.entries.length; binding++) {\r\n const bindingPoint = layout.entries[binding];\r\n if (bindingPoint.name === bindName) {\r\n return {\r\n group: group,\r\n binding: binding,\r\n type: bindingPoint.type\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n get bindGroupLayouts(): Immutable<BindGroupLayout[]> {\r\n return this._bindGroupLayouts;\r\n }\r\n get vertexAttributes(): Immutable<number[]> {\r\n return this._vertexAttributes;\r\n }\r\n setUniform(name: string, value: IUniformValue | Record<string, IUniformValue> | IUniformValue[]) {\r\n const setter = this._uniformSetters[name];\r\n if (setter) {\r\n setter(value as IUniformValue);\r\n } else {\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto === Object.getPrototypeOf({})) {\r\n this._setUniformStruct(name, value as Record<string, IUniformValue>);\r\n } else if (proto == Object.getPrototypeOf([])) {\r\n this._setUniformArray(name, value as IUniformValue[]);\r\n }\r\n }\r\n }\r\n setBlock(name: string, value: WebGLGPUBuffer, offset: number) {\r\n const info = this._blockInfo[name];\r\n if (info) {\r\n this._device.bindUniformBuffer(info.index, value, offset);\r\n /*\r\n if (offset) {\r\n (this._device.context as WebGL2RenderingContext).bindBufferRange(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n info.index,\r\n value.object,\r\n offset,\r\n value.byteLength - offset\r\n );\r\n } else {\r\n (this._device.context as WebGL2RenderingContext).bindBufferBase(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n info.index,\r\n value.object\r\n );\r\n }\r\n */\r\n } else {\r\n console.error(`Block not found: ${name}`);\r\n }\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteProgram(this._object);\r\n this._object = null;\r\n this._unitCounter = 0;\r\n this._uniformSetters = {};\r\n this._uniformInfo = [];\r\n this._blockInfo = {};\r\n this._error = '';\r\n this._vertexShader = null;\r\n this._fragmentShader = null;\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n isProgram(): this is GPUProgram {\r\n return true;\r\n }\r\n use() {\r\n if (this !== this._device.context._currentProgram) {\r\n if (!this.checkLoad()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n createUniformBuffer(uniform: string) {\r\n const type = this.getBindingInfo(uniform)?.type as PBStructTypeInfo;\r\n return type ? this.device.createStructuredBuffer(type, { usage: 'uniform' }) : null;\r\n }\r\n private _setUniformStruct(name: string, value: Record<string, IUniformValue>) {\r\n for (const k in value) {\r\n this.setUniform(`${name}.${k}`, value[k]);\r\n }\r\n }\r\n private _setUniformArray(name: string, value: IUniformValue[]) {\r\n for (let i = 0; i < value.length; i++) {\r\n this.setUniform(`${name}[${i}]`, value[i]);\r\n }\r\n }\r\n private load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n const gl = this._device.context;\r\n this._error = null;\r\n this._uniformSetters = {};\r\n if (!this._object) {\r\n this._object = this._device.context.createProgram();\r\n }\r\n this._vertexShader = gl.createShader(WebGLEnum.VERTEX_SHADER);\r\n gl.attachShader(this._object, this._vertexShader!);\r\n gl.shaderSource(this._vertexShader!, this._vs);\r\n gl.compileShader(this._vertexShader!);\r\n this._fragmentShader = gl.createShader(WebGLEnum.FRAGMENT_SHADER);\r\n gl.attachShader(this._object, this._fragmentShader!);\r\n gl.shaderSource(this._fragmentShader!, this._fs);\r\n gl.compileShader(this._fragmentShader!);\r\n for (let loc = 0; loc < semanticList.length; loc++) {\r\n gl.bindAttribLocation(this._object, loc, semanticList[loc]);\r\n }\r\n gl.linkProgram(this._object);\r\n }\r\n private checkLoad() {\r\n if (!this._object) {\r\n return false;\r\n }\r\n if (this._vertexShader) {\r\n const gl = this._device.context;\r\n if (!this._device.isContextLost()) {\r\n if (!gl.getProgramParameter(this._object, WebGLEnum.LINK_STATUS)) {\r\n if (!gl.getShaderParameter(this._vertexShader, WebGLEnum.COMPILE_STATUS)) {\r\n this._error = gl.getShaderInfoLog(this._vertexShader);\r\n console.error(new Error(`Compile shader failed: ${this._error}`));\r\n } else if (!gl.getShaderParameter(this._fragmentShader!, WebGLEnum.COMPILE_STATUS)) {\r\n this._error = gl.getShaderInfoLog(this._fragmentShader!);\r\n console.error(new Error(`Compile shader failed: ${this._error}`));\r\n } else {\r\n this._error = gl.getProgramInfoLog(this._object);\r\n console.error(new Error(`Load program failed: \\n${this._error}`));\r\n }\r\n }\r\n }\r\n gl.deleteShader(this._vertexShader);\r\n this._vertexShader = null;\r\n gl.deleteShader(this._fragmentShader);\r\n this._fragmentShader = null;\r\n if (this._error) {\r\n gl.deleteProgram(this._object);\r\n this._object = null;\r\n return false;\r\n }\r\n this._device.context._currentProgram = this;\r\n this._device.context.useProgram(this._object);\r\n this._uniformSetters = this.createUniformSetters();\r\n } else {\r\n this._device.context._currentProgram = this;\r\n this._device.context.useProgram(this._object);\r\n }\r\n return true;\r\n }\r\n private createUniformSetter(info: ProgramUniformInfo): Nullable<UniformSetter> {\r\n const loc = info.location!;\r\n const isArray = info.isArray;\r\n const gl = this._device.context;\r\n switch (info.type) {\r\n case WebGLEnum.FLOAT:\r\n return this.getUniformSetterfv(loc);\r\n case WebGLEnum.FLOAT_VEC2:\r\n return this.getUniformSetter2fv(loc);\r\n case WebGLEnum.FLOAT_VEC3:\r\n return this.getUniformSetter3fv(loc);\r\n case WebGLEnum.FLOAT_VEC4:\r\n return this.getUniformSetter4fv(loc);\r\n case WebGLEnum.INT:\r\n return this.getUniformSetteriv(loc);\r\n case WebGLEnum.INT_VEC2:\r\n return this.getUniformSetter2iv(loc);\r\n case WebGLEnum.INT_VEC3:\r\n return this.getUniformSetter3iv(loc);\r\n case WebGLEnum.INT_VEC4:\r\n return this.getUniformSetter4iv(loc);\r\n case WebGLEnum.UNSIGNED_INT:\r\n return this.getUniformSetteruiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC2:\r\n return this.getUniformSetter2uiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC3:\r\n return this.getUniformSetter3uiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC4:\r\n return this.getUniformSetter4uiv(loc);\r\n case WebGLEnum.BOOL:\r\n return this.getUniformSetteriv(loc);\r\n case WebGLEnum.BOOL_VEC2:\r\n return this.getUniformSetter2iv(loc);\r\n case WebGLEnum.BOOL_VEC3:\r\n return this.getUniformSetter3iv(loc);\r\n case WebGLEnum.BOOL_VEC4:\r\n return this.getUniformSetter4iv(loc);\r\n case WebGLEnum.FLOAT_MAT2:\r\n return this.getUniformSetterMatrix2(loc);\r\n case WebGLEnum.FLOAT_MAT2x3:\r\n return this.getUniformSetterMatrix23(loc);\r\n case WebGLEnum.FLOAT_MAT2x4:\r\n return this.getUniformSetterMatrix24(loc);\r\n case WebGLEnum.FLOAT_MAT3:\r\n return this.getUniformSetterMatrix3(loc);\r\n case WebGLEnum.FLOAT_MAT3x2:\r\n return this.getUniformSetterMatrix32(loc);\r\n case WebGLEnum.FLOAT_MAT3x4:\r\n return this.getUniformSetterMatrix34(loc);\r\n case WebGLEnum.FLOAT_MAT4:\r\n return this.getUniformSetterMatrix4(loc);\r\n case WebGLEnum.FLOAT_MAT4x2:\r\n return this.getUniformSetterMatrix42(loc);\r\n case WebGLEnum.FLOAT_MAT4x3:\r\n return this.getUniformSetterMatrix43(loc);\r\n case WebGLEnum.SAMPLER_2D:\r\n case WebGLEnum.SAMPLER_2D_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_2D:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_2D: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_2D, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_2D_ARRAY:\r\n case WebGLEnum.SAMPLER_2D_ARRAY_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_2D_ARRAY:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_2D_ARRAY: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_2D_ARRAY, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_CUBE:\r\n case WebGLEnum.SAMPLER_CUBE_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_CUBE:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_CUBE: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_CUBE_MAP, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_3D:\r\n case WebGLEnum.INT_SAMPLER_3D:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_3D: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_3D, unit);\r\n }\r\n }\r\n }\r\n console.error(`Error: unsupported uniform type: ${info.name}`);\r\n return null;\r\n }\r\n private createUniformSetters() {\r\n const uniformSetters: Record<string, UniformSetter> = {};\r\n const gl = this._device.context;\r\n const numUniforms = gl.getProgramParameter(this._object!, WebGLEnum.ACTIVE_UNIFORMS) as number;\r\n\r\n this._uniformInfo = [];\r\n for (let index = 0; index < numUniforms; index++) {\r\n const info = gl.getActiveUniform(this._object!, index)!;\r\n let name = info.name;\r\n let isArray = false;\r\n if (name.startsWith('gl_') || name.startsWith('webgl_')) {\r\n this._uniformInfo.push(null);\r\n } else {\r\n if (name.substr(-3) === '[0]') {\r\n // is array\r\n name = name.substr(0, name.length - 3);\r\n isArray = true;\r\n }\r\n const size = info.size;\r\n const type = info.type;\r\n const blockIndex = -1;\r\n const offset = 0;\r\n const location = gl.getUniformLocation(this._object!, info.name);\r\n const view = null;\r\n const { ctor: viewCtor, elementSize: viewElementSize } = this.getTypedArrayInfo(info.type);\r\n const uniformInfo = {\r\n index,\r\n name,\r\n size,\r\n type,\r\n blockIndex,\r\n offset,\r\n isArray,\r\n location,\r\n view,\r\n viewCtor,\r\n viewElementSize\r\n };\r\n this._uniformInfo.push(uniformInfo);\r\n if (location) {\r\n uniformSetters[name] = this.createUniformSetter(uniformInfo)!;\r\n }\r\n }\r\n }\r\n if (isWebGL2(gl)) {\r\n this._blockInfo = {};\r\n const numBlocks = gl.getProgramParameter(this._object!, WebGLEnum.ACTIVE_UNIFORM_BLOCKS) as number;\r\n for (let i = 0; i < numBlocks; i++) {\r\n const name = gl.getActiveUniformBlockName(this._object!, i)!;\r\n const index = gl.getUniformBlockIndex(this._object!, name);\r\n const usedInVS = !!gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\r\n );\r\n const usedInFS = !!gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\r\n );\r\n const used = usedInVS || usedInFS;\r\n const size = gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_DATA_SIZE\r\n ) as number;\r\n const uniformIndices = gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\r\n ) as Uint32Array<ArrayBuffer>;\r\n this._blockInfo[name] = { index, used, size, uniformIndices };\r\n gl.uniformBlockBinding(this._object!, index, index);\r\n }\r\n }\r\n return uniformSetters;\r\n }\r\n private getUniformSetterfv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform1fv(location, value);\r\n };\r\n }\r\n private getUniformSetter2fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform2fv(location, value);\r\n };\r\n }\r\n private getUniformSetter3fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform3fv(location, value);\r\n };\r\n }\r\n private getUniformSetter4fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform4fv(location, value);\r\n };\r\n }\r\n private getUniformSetteriv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform1iv(location, value);\r\n };\r\n }\r\n private getUniformSetter2iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform2iv(location, value);\r\n };\r\n }\r\n private getUniformSetter3iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform3iv(location, value);\r\n };\r\n }\r\n private getUniformSetter4iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform4iv(location, value);\r\n };\r\n }\r\n private getUniformSetteruiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform1uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter2uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform2uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter3uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform3uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter4uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform4uiv(location, value);\r\n };\r\n }\r\n private getUniformSetterMatrix2(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniformMatrix2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix23(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix2x3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix24(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix2x4fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix32(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3x2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix3(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix34(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3x4fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix42(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix4x2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix43(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix4x3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix4(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniformMatrix4fv(location, false, value);\r\n };\r\n }\r\n private getSamplerSetter(location: WebGLUniformLocation, target: number, unit: number) {\r\n return (texture: any) => {\r\n this._device.bindTexture(target, unit, texture[0], texture[1]);\r\n };\r\n /*\r\n const gl = this._device.context;\r\n return isWebGL2(gl)\r\n ? (texture: [WebGLBaseTexture, WebGLTextureSampler]) => {\r\n const tex = texture?.[0].object ?? null;\r\n const sampler = texture?.[1].object ?? null;\r\n //gl.uniform1i(location, unit);\r\n gl.activeTexture(this._device.context.TEXTURE0 + unit);\r\n gl.bindTexture(target, tex);\r\n gl.bindSampler(unit, sampler);\r\n }\r\n : (texture: [WebGLBaseTexture, WebGLTextureSampler]) => {\r\n const tex = texture?.[0] ?? null;\r\n const sampler = texture?.[1] ?? null;\r\n //gl.uniform1i(location, unit);\r\n gl.activeTexture(this._device.context.TEXTURE0 + unit);\r\n gl.bindTexture(target, tex?.object ?? null);\r\n if (tex && sampler && this._device.getCurrentSamplerForTexture(tex) !== sampler) {\r\n const fallback = tex.isWebGL1Fallback;\r\n this._device.setCurrentSamplerForTexture(tex, sampler);\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_WRAP_S,\r\n textureWrappingMap[false && fallback ? 'clamp' : sampler.addressModeU]\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_WRAP_T,\r\n textureWrappingMap[false && fallback ? 'clamp' : sampler.addressModeV]\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(sampler.magFilter)\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(sampler.minFilter, tex.isWebGL1Fallback ? 'none' : sampler.mipFilter)\r\n );\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, sampler.maxAnisotropy);\r\n }\r\n }\r\n };\r\n */\r\n }\r\n private getTypedArrayInfo(type: number) {\r\n let ctor: Nullable<TypedArrayConstructor<UniformBlockArray>> = null;\r\n let elementSize = 0;\r\n switch (type) {\r\n case WebGLEnum.INT:\r\n ctor = Int32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.INT_VEC2:\r\n ctor = Int32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.INT_VEC3:\r\n ctor = Int32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.INT_VEC4:\r\n ctor = Int32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT:\r\n case WebGLEnum.BOOL:\r\n ctor = Uint32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC2:\r\n case WebGLEnum.BOOL_VEC2:\r\n ctor = Uint32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC3:\r\n case WebGLEnum.BOOL_VEC3:\r\n ctor = Uint32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC4:\r\n case WebGLEnum.BOOL_VEC4:\r\n ctor = Uint32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.FLOAT:\r\n ctor = Float32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.FLOAT_VEC2:\r\n ctor = Float32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.FLOAT_VEC3:\r\n ctor = Float32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.FLOAT_VEC4:\r\n case WebGLEnum.FLOAT_MAT2:\r\n ctor = Float32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.FLOAT_MAT2x3:\r\n case WebGLEnum.FLOAT_MAT3x2:\r\n ctor = Float32Array;\r\n elementSize = 24;\r\n break;\r\n case WebGLEnum.FLOAT_MAT2x4:\r\n case WebGLEnum.FLOAT_MAT4x2:\r\n ctor = Float32Array;\r\n elementSize = 32;\r\n break;\r\n case WebGLEnum.FLOAT_MAT3:\r\n ctor = Float32Array;\r\n elementSize = 36;\r\n break;\r\n case WebGLEnum.FLOAT_MAT3x4:\r\n case WebGLEnum.FLOAT_MAT4x3:\r\n ctor = Float32Array;\r\n elementSize = 48;\r\n break;\r\n case WebGLEnum.FLOAT_MAT4:\r\n ctor = Float32Array;\r\n elementSize = 64;\r\n break;\r\n }\r\n return { ctor: ctor!, elementSize };\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport {\r\n textureTargetMap,\r\n textureWrappingMap,\r\n textureMagFilterToWebGL,\r\n textureMinFilterToWebGL,\r\n compareFuncMap\r\n} from './constants_webgl';\r\nimport type { SamplerOptions, TextureSampler } from '@zephyr3d/device';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport type { RequireOptionals } from '@zephyr3d/base';\r\n\r\nexport class WebGLTextureSampler\r\n extends WebGLGPUObject<WebGLSampler>\r\n implements TextureSampler<WebGLSampler>\r\n{\r\n private readonly _options: RequireOptionals<SamplerOptions>;\r\n constructor(device: WebGLDevice, options: SamplerOptions) {\r\n super(device);\r\n this._options = Object.assign(\r\n {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none',\r\n lodMin: 0,\r\n lodMax: 32,\r\n compare: null,\r\n maxAnisotropy: 1\r\n },\r\n options || {}\r\n );\r\n this._load();\r\n }\r\n get addressModeU() {\r\n return this._options.addressU;\r\n }\r\n get addressModeV() {\r\n return this._options.addressV;\r\n }\r\n get addressModeW() {\r\n return this._options.addressW;\r\n }\r\n get magFilter() {\r\n return this._options.magFilter;\r\n }\r\n get minFilter() {\r\n return this._options.minFilter;\r\n }\r\n get mipFilter() {\r\n return this._options.mipFilter;\r\n }\r\n get lodMin() {\r\n return this._options.lodMin;\r\n }\r\n get lodMax() {\r\n return this._options.lodMax;\r\n }\r\n get compare() {\r\n return this._options.compare;\r\n }\r\n get maxAnisotropy() {\r\n return this._options.maxAnisotropy;\r\n }\r\n destroy() {\r\n if (this._object && isWebGL2(this._device.context)) {\r\n (this._device.context as WebGL2RenderingContext).deleteSampler(this._object);\r\n }\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this._load();\r\n }\r\n }\r\n apply(texture: WebGLBaseTexture) {\r\n if (texture?.object && !this._device.isWebGL2 && !this._device.isContextLost()) {\r\n const gl = this._device.context;\r\n const target = textureTargetMap[texture.target];\r\n this._device.bindTexture(target, 0, texture);\r\n //gl.bindTexture(target, texture.object);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_S, textureWrappingMap[this._options.addressU]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_T, textureWrappingMap[this._options.addressV]);\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(this._options.magFilter)\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(this._options.minFilter, this._options.mipFilter)\r\n );\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, this._options.maxAnisotropy);\r\n }\r\n }\r\n }\r\n private _load() {\r\n if (!isWebGL2(this._device.context)) {\r\n this._object = {};\r\n return true;\r\n }\r\n if (!this._device.isContextLost()) {\r\n const gl = this._device.context;\r\n if (!this._object) {\r\n this._object = gl.createSampler();\r\n }\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_S,\r\n textureWrappingMap[this._options.addressU]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_T,\r\n textureWrappingMap[this._options.addressV]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_R,\r\n textureWrappingMap[this._options.addressW]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(this._options.magFilter)\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(this._options.minFilter, this._options.mipFilter)\r\n );\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MIN_LOD, this._options.lodMin);\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MAX_LOD, this._options.lodMax);\r\n if (this._options.compare === null) {\r\n gl.samplerParameteri(this._object, WebGLEnum.TEXTURE_COMPARE_MODE, WebGLEnum.NONE);\r\n } else {\r\n gl.samplerParameteri(this._object, WebGLEnum.TEXTURE_COMPARE_MODE, WebGLEnum.COMPARE_REF_TO_TEXTURE);\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_COMPARE_FUNC,\r\n compareFuncMap[this._options.compare]\r\n );\r\n }\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MAX_ANISOTROPY, this._options.maxAnisotropy);\r\n }\r\n }\r\n return true;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return true;\r\n }\r\n}\r\n","import { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { SamplerOptions } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nexport class SamplerCache {\r\n private readonly _device: WebGLDevice;\r\n private _samplers: Record<string, WebGLTextureSampler>;\r\n constructor(device: WebGLDevice) {\r\n this._device = device;\r\n this._samplers = {};\r\n }\r\n fetchSampler(options: SamplerOptions) {\r\n const hash = this.hash(options);\r\n let sampler = this._samplers[hash];\r\n if (!sampler) {\r\n sampler = this.createSampler(options);\r\n this._samplers[hash] = sampler;\r\n }\r\n return sampler;\r\n }\r\n private hash(options: SamplerOptions) {\r\n const addressU = options.addressU ? String(options.addressU) : '';\r\n const addressV = options.addressV ? String(options.addressV) : '';\r\n const addressW = options.addressW ? String(options.addressW) : '';\r\n const magFilter = options.magFilter ? String(options.magFilter) : '';\r\n const minFilter = options.minFilter ? String(options.minFilter) : '';\r\n const mipFilter = options.mipFilter ? String(options.mipFilter) : '';\r\n const lodMin = options.lodMin ? String(options.lodMin) : '';\r\n const lodMax = options.lodMax ? String(options.lodMax) : '';\r\n const compare = options.compare ? String(options.compare) : '';\r\n const maxAnisotropy = options.maxAnisotropy ? String(options.maxAnisotropy) : '';\r\n return `${addressU}:${addressV}:${addressW}:${magFilter}:${minFilter}:${mipFilter}:${lodMin}:${lodMax}:${compare}:${maxAnisotropy}`;\r\n }\r\n private createSampler(options: SamplerOptions) {\r\n return new WebGLTextureSampler(this._device, options);\r\n }\r\n}\r\n","import type { Vector4, TypedArray, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { makeObservable } from '@zephyr3d/base';\r\nimport type {\r\n WebGLContext,\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n TextureSampler,\r\n Texture2D,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n BindGroup,\r\n BindGroupLayout,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n VertexLayoutOptions,\r\n BaseTexture,\r\n GPUProgramConstructParams,\r\n RenderProgramConstructParams,\r\n DeviceOptions,\r\n DeviceViewport,\r\n DeviceCaps,\r\n PrimitiveType,\r\n TextureFormat,\r\n RenderStateSet,\r\n PBStructTypeInfo,\r\n DeviceBackend,\r\n DeviceEventMap,\r\n AbstractDevice,\r\n RenderBundle\r\n} from '@zephyr3d/device';\r\nimport {\r\n hasAlphaChannel,\r\n hasRedChannel,\r\n hasGreenChannel,\r\n hasBlueChannel,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n isFloatTextureFormat,\r\n getTextureFormatBlockSize,\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n BaseDevice,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo\r\n} from '@zephyr3d/device';\r\nimport { isWebGL2, WebGLError } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { WebGLTexture2D } from './texture2d_webgl';\r\nimport { WebGLTexture2DArray } from './texture2darray_webgl';\r\nimport { WebGLTexture3D } from './texture3d_webgl';\r\nimport { WebGLTextureCube } from './texturecube_webgl';\r\nimport { WebGLTextureVideo } from './texturevideo_webgl';\r\nimport { WebGLVertexLayout } from './vertexlayout_webgl';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\nimport { WebGLIndexBuffer } from './indexbuffer_webgl';\r\nimport { WebGLFrameBuffer } from './framebuffer_webgl';\r\nimport {\r\n WebGLBlendingState,\r\n WebGLColorState,\r\n WebGLDepthState,\r\n WebGLRasterizerState,\r\n WebGLRenderStateSet,\r\n WebGLStencilState\r\n} from './renderstate_webgl';\r\nimport { GPUTimer } from './gpu_timer';\r\nimport { WebGLTextureCaps, WebGLFramebufferCaps, WebGLMiscCaps, WebGLShaderCaps } from './capabilities_webgl';\r\nimport { WebGLBindGroup } from './bindgroup_webgl';\r\nimport { WebGLGPUProgram } from './gpuprogram_webgl';\r\nimport {\r\n primitiveTypeMap,\r\n textureMagFilterToWebGL,\r\n textureMinFilterToWebGL,\r\n textureWrappingMap,\r\n typeMap\r\n} from './constants_webgl';\r\nimport { SamplerCache } from './sampler_cache';\r\nimport { WebGLStructuredBuffer } from './structuredbuffer_webgl';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\n\r\ndeclare global {\r\n interface WebGLRenderingContext {\r\n _currentFramebuffer?: Nullable<WebGLFrameBuffer>;\r\n _currentProgram?: Nullable<WebGLGPUProgram>;\r\n }\r\n interface WebGL2RenderingContext {\r\n _currentFramebuffer?: Nullable<WebGLFrameBuffer>;\r\n _currentProgram?: Nullable<WebGLGPUProgram>;\r\n }\r\n}\r\n\r\ntype VAOObject = WebGLVertexArrayObject | WebGLVertexArrayObjectOES;\r\n\r\ntype WebGLRenderBundle = {\r\n program: Nullable<WebGLGPUProgram>;\r\n bindGroups: WebGLBindGroup[];\r\n bindGroupOffsets: Nullable<Iterable<number>>[];\r\n vertexLayout: Nullable<WebGLVertexLayout>;\r\n primitiveType: PrimitiveType;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n first: number;\r\n count: number;\r\n numInstances: number;\r\n}[];\r\n\r\nexport interface VertexArrayObjectEXT {\r\n createVertexArray: () => VAOObject;\r\n bindVertexArray: (arrayObject: Nullable<VAOObject>) => void;\r\n deleteVertexArray: (arrayObject: VAOObject) => void;\r\n isVertexArray: (arrayObject: VAOObject) => GLboolean;\r\n}\r\n\r\nexport interface InstancedArraysEXT {\r\n drawArraysInstanced: (mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei) => void;\r\n drawElementsInstanced: (\r\n mode: GLenum,\r\n count: GLsizei,\r\n type: GLenum,\r\n offset: GLintptr,\r\n primcount: GLsizei\r\n ) => void;\r\n vertexAttribDivisor: (index: GLuint, divisor: GLuint) => void;\r\n}\r\n\r\nexport interface DrawBuffersEXT {\r\n drawBuffers(buffers: number[]): void;\r\n}\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst tempInt32Array = new Int32Array(4);\r\nconst tempUint32Array = new Uint32Array(4);\r\n\r\nexport class WebGLDevice extends BaseDevice {\r\n private readonly _context: WebGLContext;\r\n private readonly _isWebGL2: boolean;\r\n private readonly _msaaSampleCount: number;\r\n private readonly _loseContextExtension: Nullable<WEBGL_lose_context>;\r\n private _contextLost: boolean;\r\n private _isRendering: boolean;\r\n private _reverseWindingOrder: boolean;\r\n private _deviceCaps!: DeviceCaps;\r\n private _vaoExt: Nullable<VertexArrayObjectEXT>;\r\n private _instancedArraysExt: Nullable<InstancedArraysEXT>;\r\n private _drawBuffersExt: Nullable<DrawBuffersEXT>;\r\n private _currentProgram: Nullable<WebGLGPUProgram>;\r\n private _currentVertexData: Nullable<WebGLVertexLayout>;\r\n private _currentStateSet: Nullable<WebGLRenderStateSet>;\r\n private _currentBindGroups: WebGLBindGroup[];\r\n private _currentBindGroupOffsets: Nullable<Iterable<number>>[];\r\n private _currentViewport: DeviceViewport;\r\n private _currentScissorRect: DeviceViewport;\r\n private _samplerCache: SamplerCache;\r\n private _textureSamplerMap: WeakMap<BaseTexture, Nullable<WebGLTextureSampler>>;\r\n private _captureRenderBundle: Nullable<WebGLRenderBundle>;\r\n private _deviceUniformBuffers: WebGLBuffer[];\r\n private _deviceUniformBufferOffsets: number[];\r\n private _bindTextures: Record<number, Nullable<WebGLTexture>[]>;\r\n private _bindSamplers: WebGLSampler[];\r\n private _readFormats: Record<\r\n string,\r\n {\r\n format: number;\r\n type: number;\r\n }\r\n >;\r\n private readonly _adapterInfo: { vendor: string; renderer: string; version: string };\r\n constructor(backend: DeviceBackend, cvs: HTMLCanvasElement, options?: DeviceOptions) {\r\n super(cvs, backend, options?.dpr);\r\n this._isRendering = false;\r\n this._captureRenderBundle = null;\r\n this._msaaSampleCount = options?.msaa ? 4 : 1;\r\n const context: WebGLContext = this.canvas.getContext(backend === backend1 ? 'webgl' : 'webgl2', {\r\n antialias: !!options?.msaa,\r\n depth: true,\r\n stencil: true,\r\n premultipliedAlpha: false\r\n }) as WebGLContext;\r\n if (!context) {\r\n throw new Error('Invalid argument or no webgl support');\r\n }\r\n this._isWebGL2 = isWebGL2(context);\r\n this._adapterInfo = {\r\n vendor: context.getParameter(context.VENDOR),\r\n renderer: context.getParameter(context.RENDERER),\r\n version: context.getParameter(context.VERSION)\r\n };\r\n this._contextLost = false;\r\n this._vaoExt = null;\r\n this._instancedArraysExt = null;\r\n this._drawBuffersExt = null;\r\n this._reverseWindingOrder = false;\r\n this._context = context;\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._deviceUniformBuffers = [];\r\n this._deviceUniformBufferOffsets = [];\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n this._bindSamplers = [];\r\n this._samplerCache = new SamplerCache(this);\r\n this._textureSamplerMap = new WeakMap();\r\n this._loseContextExtension = this._context.getExtension('WEBGL_lose_context');\r\n this._readFormats = {};\r\n this.canvas.addEventListener(\r\n 'webglcontextlost',\r\n (evt) => {\r\n this._contextLost = true;\r\n evt.preventDefault();\r\n this.handleContextLost();\r\n },\r\n false\r\n );\r\n this.canvas.addEventListener(\r\n 'webglcontextrestored',\r\n () => {\r\n this._contextLost = false;\r\n this.handleContextRestored();\r\n },\r\n false\r\n );\r\n }\r\n get context() {\r\n return this._context;\r\n }\r\n getAdapterInfo() {\r\n return this._adapterInfo;\r\n }\r\n getFrameBufferSampleCount() {\r\n return this.getFramebuffer()?.getSampleCount() ?? this._msaaSampleCount;\r\n }\r\n get isWebGL2() {\r\n return this._isWebGL2;\r\n }\r\n get drawingBufferWidth() {\r\n return this.getDrawingBufferWidth();\r\n }\r\n get drawingBufferHeight() {\r\n return this.getDrawingBufferHeight();\r\n }\r\n get clientWidth() {\r\n return this.canvas.clientWidth;\r\n }\r\n get clientHeight() {\r\n return this.canvas.clientHeight;\r\n }\r\n isContextLost() {\r\n return this._contextLost;\r\n }\r\n getDeviceCaps(): Immutable<DeviceCaps> {\r\n return this._deviceCaps;\r\n }\r\n get vaoExt() {\r\n return this._vaoExt;\r\n }\r\n get instancedArraysExt() {\r\n return this._instancedArraysExt;\r\n }\r\n get drawBuffersExt() {\r\n return this._drawBuffersExt;\r\n }\r\n getDrawingBufferWidth() {\r\n return this._context._currentFramebuffer?.getWidth() || this._context.drawingBufferWidth;\r\n }\r\n getDrawingBufferHeight() {\r\n return this._context._currentFramebuffer?.getHeight() || this._context.drawingBufferHeight;\r\n }\r\n getBackBufferWidth() {\r\n return this.canvas.width;\r\n }\r\n getBackBufferHeight() {\r\n return this.canvas.height;\r\n }\r\n invalidateBindingTextures() {\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n }\r\n bindTexture(\r\n target: number,\r\n layer: number,\r\n texture: Nullable<WebGLBaseTexture>,\r\n sampler?: Nullable<WebGLTextureSampler>\r\n ) {\r\n const tex = texture?.object ?? null;\r\n const gl = this._context;\r\n gl.activeTexture(WebGLEnum.TEXTURE0 + layer);\r\n if (this._bindTextures[target][layer] !== tex) {\r\n gl.bindTexture(target, tex);\r\n this._bindTextures[target][layer] = tex;\r\n }\r\n if (this._isWebGL2) {\r\n const samp = sampler?.object ?? null;\r\n if (samp && this._bindSamplers[layer] !== samp) {\r\n (gl as WebGL2RenderingContext).bindSampler(layer, samp);\r\n this._bindSamplers[layer] = samp;\r\n }\r\n } else if (texture && sampler && this._textureSamplerMap.get(texture) !== sampler) {\r\n const fallback = texture.isWebGL1Fallback;\r\n this._textureSamplerMap.set(texture, sampler);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_S, textureWrappingMap[sampler.addressModeU]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_T, textureWrappingMap[sampler.addressModeV]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_MAG_FILTER, textureMagFilterToWebGL(sampler.magFilter));\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(sampler.minFilter, fallback ? 'none' : sampler.mipFilter)\r\n );\r\n if (this.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, sampler.maxAnisotropy);\r\n }\r\n }\r\n }\r\n bindUniformBuffer(index: number, buffer: WebGLGPUBuffer, offset: number) {\r\n if (\r\n this._deviceUniformBuffers[index] !== buffer.object ||\r\n this._deviceUniformBufferOffsets[index] !== offset\r\n ) {\r\n if (offset) {\r\n (this.context as WebGL2RenderingContext).bindBufferRange(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n index,\r\n buffer.object,\r\n offset,\r\n buffer.byteLength - offset\r\n );\r\n } else {\r\n (this.context as WebGL2RenderingContext).bindBufferBase(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n index,\r\n buffer.object\r\n );\r\n }\r\n this._deviceUniformBuffers[index] = buffer.object!;\r\n this._deviceUniformBufferOffsets[index] = offset;\r\n }\r\n }\r\n async initContext() {\r\n this.initContextState();\r\n await this.initResizer();\r\n /*\r\n this.on('resize', () => {\r\n const width = Math.max(1, Math.round(this.canvas.clientWidth * this._dpr));\r\n const height = Math.max(1, Math.round(this.canvas.clientHeight * this._dpr));\r\n if (width !== this.canvas.width || height !== this.canvas.height) {\r\n this.canvas.width = width;\r\n this.canvas.height = height;\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissorRect);\r\n }\r\n });\r\n this.dispatchEvent('resize', this.canvas.clientWidth, this.canvas.clientHeight);\r\n */\r\n }\r\n protected _handleResize(_cssWidth: number, _cssHeight: number, deviceWidth: number, deviceHeight: number) {\r\n const lastWidth = this.canvas.clientWidth;\r\n const lastHeight = this.canvas.clientHeight;\r\n this.canvas.width = deviceWidth;\r\n this.canvas.height = deviceHeight;\r\n if (\r\n (this.canvas.clientWidth !== lastWidth && this.canvas.clientWidth === this.canvas.width) ||\r\n (this.canvas.clientHeight !== lastHeight && this.canvas.clientHeight === this.canvas.height)\r\n ) {\r\n console.warn(\r\n '[Engine] Canvas intrinsic size affected layout. CSS size locked to prevent feedback loop.'\r\n );\r\n this.canvas.style.width = `${lastWidth}px`;\r\n this.canvas.style.height = `${lastHeight}px`;\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissorRect);\r\n }\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n const gl = this._context;\r\n const colorFlag = clearColor ? gl.COLOR_BUFFER_BIT : 0;\r\n const depthFlag = typeof clearDepth === 'number' ? gl.DEPTH_BUFFER_BIT : 0;\r\n const stencilFlag = typeof clearStencil === 'number' ? gl.STENCIL_BUFFER_BIT : 0;\r\n if (colorFlag || depthFlag || stencilFlag) {\r\n WebGLDepthState.applyDefaults(this._context);\r\n if (isWebGL2(gl) && gl._currentFramebuffer) {\r\n if (depthFlag || stencilFlag) {\r\n const depthAttachment = gl._currentFramebuffer.getDepthAttachment();\r\n if (depthAttachment) {\r\n gl.clearBufferfi(WebGLEnum.DEPTH_STENCIL, 0, clearDepth ?? 1, clearStencil ?? 0);\r\n }\r\n }\r\n if (clearColor) {\r\n const attachments = gl._currentFramebuffer.getColorAttachments();\r\n for (let i = 0; i < attachments.length; i++) {\r\n if (isIntegerTextureFormat(attachments[i].format)) {\r\n if (isSignedTextureFormat(attachments[i].format)) {\r\n tempInt32Array[0] = clearColor[0];\r\n tempInt32Array[1] = clearColor[1];\r\n tempInt32Array[2] = clearColor[2];\r\n tempInt32Array[3] = clearColor[3];\r\n gl.clearBufferiv(WebGLEnum.COLOR, i, tempInt32Array);\r\n } else {\r\n tempUint32Array[0] = clearColor[0];\r\n tempUint32Array[1] = clearColor[1];\r\n tempUint32Array[2] = clearColor[2];\r\n tempUint32Array[3] = clearColor[3];\r\n gl.clearBufferuiv(WebGLEnum.COLOR, i, tempUint32Array);\r\n }\r\n } else {\r\n gl.clearBufferfv(WebGLEnum.COLOR, i, clearColor);\r\n }\r\n }\r\n }\r\n } else {\r\n if (clearColor) {\r\n gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);\r\n }\r\n if (depthFlag) {\r\n gl.clearDepth(clearDepth as number);\r\n }\r\n if (stencilFlag) {\r\n gl.clearStencil(clearStencil as number);\r\n }\r\n gl.clear(colorFlag | depthFlag | stencilFlag);\r\n }\r\n (gl._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (gl._currentFramebuffer as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n }\r\n // factory\r\n createGPUTimer() {\r\n return new GPUTimer(this);\r\n }\r\n createRenderStateSet() {\r\n return new WebGLRenderStateSet(this._context);\r\n }\r\n createBlendingState() {\r\n return new WebGLBlendingState();\r\n }\r\n createColorState() {\r\n return new WebGLColorState();\r\n }\r\n createRasterizerState() {\r\n return new WebGLRasterizerState();\r\n }\r\n createDepthState() {\r\n return new WebGLDepthState();\r\n }\r\n createStencilState() {\r\n return new WebGLStencilState();\r\n }\r\n createSampler(options: SamplerOptions) {\r\n return this._samplerCache.fetchSampler(options) as TextureSampler;\r\n }\r\n createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!data) {\r\n console.error(`Device.createTextureFromMipmapData() failed: invalid data`);\r\n return null;\r\n }\r\n if (data.isCubemap) {\r\n const tex = new WebGLTextureCube(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isVolume) {\r\n const tex = new WebGLTexture3D(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isArray) {\r\n const tex = new WebGLTexture2DArray(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else {\r\n const tex = new WebGLTexture2D(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n }\r\n }\r\n createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTexture2D) ?? new WebGLTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2D() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTexture2D) ?? new WebGLTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2DFromImage() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.loadFromElement(element, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGLTexture2DArray) ?? new WebGLTexture2DArray(this);\r\n if (!tex.isTexture2DArray()) {\r\n console.error('createTexture2DArray() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!elements || elements.length === 0) {\r\n console.error('createTexture2DArrayFromImages() failed: Invalid image elements');\r\n return null;\r\n }\r\n let width = 0;\r\n let height = 0;\r\n for (const element of elements) {\r\n if (width === 0 || height === 0) {\r\n width = element.width;\r\n height = element.height;\r\n } else if (width !== element.width || height !== element.height) {\r\n console.error('createTexture2DArrayFromImages() failed: Image elements must have the same size');\r\n return null;\r\n }\r\n }\r\n if (options?.texture && !options.texture.isTexture2DArray()) {\r\n console.error('createTexture2DArrayFromImages() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n let tex: Nullable<WebGLTexture2DArray> = options?.texture as Nullable<WebGLTexture2DArray>;\r\n if (tex) {\r\n if (tex.depth !== elements.length) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Layer count of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n if (tex.width !== width || tex.height !== height) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Size of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n } else {\r\n tex = this.createTexture2DArray(\r\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\r\n width,\r\n height,\r\n elements.length,\r\n options\r\n );\r\n if (!tex) {\r\n console.error('createTexture2DArrayFromImages() failed');\r\n return null;\r\n }\r\n for (let i = 0; i < elements.length; i++) {\r\n tex.updateFromElement(elements[i], 0, 0, i, 0, 0, width, height);\r\n }\r\n }\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!this.isWebGL2) {\r\n console.error('device does not support 3d texture');\r\n return null;\r\n }\r\n const tex = (options?.texture as WebGLTexture3D) ?? new WebGLTexture3D(this);\r\n if (!tex.isTexture3D()) {\r\n console.error('createTexture3D() failed: options.texture must be 3d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTextureCube) ?? new WebGLTextureCube(this);\r\n if (!tex.isTextureCube()) {\r\n console.error('createCubeTexture() failed: options.texture must be cube texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, size, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions) {\r\n const tex = new WebGLTextureVideo(this, el);\r\n tex.samplerOptions = samplerOptions ?? null;\r\n return tex;\r\n }\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number) {\r\n if (!src?.isFramebuffer() || !dst?.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): invalid framebuffer or texture');\r\n return;\r\n }\r\n if (!Number.isInteger(level) || level < 0 || level >= dst.mipLevelCount) {\r\n console.error('copyFramebufferToTexture2D(): invalid mipmap level');\r\n return;\r\n }\r\n const tex = src.getColorAttachments()[index];\r\n if (!tex || !tex.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): Color attachment is not a 2D texture');\r\n return;\r\n }\r\n const srcLevel = src.getColorAttachmentMipLevel(index);\r\n const srcWidth = Math.max(tex.width >> srcLevel, 1);\r\n const srcHeight = Math.max(tex.height >> srcLevel, 1);\r\n const dstWidth = Math.max(dst.width >> level, 1);\r\n const dstHeight = Math.max(dst.height >> level, 1);\r\n if (srcWidth !== dstWidth || srcHeight !== dstHeight) {\r\n console.error('Source texture and destination texture must have same size');\r\n return;\r\n }\r\n if (tex.format !== dst.format) {\r\n console.error(\r\n 'copyFramebufferToTexture2D(): Color attachment must have same format with destination texture'\r\n );\r\n return;\r\n }\r\n if (index > 0 && !this.isWebGL2) {\r\n console.error(\r\n 'copyFramebufferToTexture2D(): Non-zero color attachment index requires WebGL2 or WebGPU device'\r\n );\r\n return;\r\n }\r\n this.pushDeviceStates();\r\n // If src is current framebuffer, force mipmaps to be generated\r\n this.setFramebuffer(null);\r\n this.setFramebuffer(src);\r\n const gl = this._context;\r\n if (this.isWebGL2) {\r\n (gl as WebGL2RenderingContext).readBuffer(gl.COLOR_ATTACHMENT0 + index);\r\n }\r\n this.bindTexture(gl.TEXTURE_2D, 0, dst as WebGLTexture2D);\r\n gl.copyTexSubImage2D(gl.TEXTURE_2D, level, 0, 0, 0, 0, srcWidth, srcHeight);\r\n this.popDeviceStates();\r\n }\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number) {\r\n if (!src || !dst) {\r\n console.error('CopyTexture2D(): invalid texture');\r\n return;\r\n }\r\n if (!Number.isInteger(srcLevel) || srcLevel < 0 || srcLevel >= src.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid source mipmap level');\r\n return;\r\n }\r\n const fb = this.createFrameBuffer([src], null);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n fb.setColorAttachmentMipLevel(0, srcLevel);\r\n this.copyFramebufferToTexture2D(fb, 0, dst, dstLevel);\r\n fb.dispose();\r\n }\r\n createGPUProgram(params: GPUProgramConstructParams) {\r\n if (params.type === 'compute') {\r\n throw new Error('device does not support compute shader');\r\n }\r\n const renderProgramParams = params.params as RenderProgramConstructParams;\r\n return new WebGLGPUProgram(\r\n this,\r\n renderProgramParams.vs,\r\n renderProgramParams.fs,\r\n renderProgramParams.bindGroupLayouts,\r\n renderProgramParams.vertexAttributes\r\n );\r\n }\r\n createBindGroup(layout: Immutable<BindGroupLayout>) {\r\n return new WebGLBindGroup(this, layout);\r\n }\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions) {\r\n return new WebGLGPUBuffer(this, this.parseBufferOptions(options), sizeInBytes, !this._isWebGL2);\r\n }\r\n copyBuffer(\r\n sourceBuffer: GPUDataBuffer<unknown>,\r\n destBuffer: GPUDataBuffer<unknown>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n if (!this.isWebGL2) {\r\n console.error(`copyBuffer() is not supported for current device`);\r\n return;\r\n }\r\n const gl = this._context as WebGL2RenderingContext;\r\n gl.bindBuffer(gl.COPY_READ_BUFFER, sourceBuffer.object!);\r\n gl.bindBuffer(gl.COPY_WRITE_BUFFER, destBuffer.object!);\r\n gl.copyBufferSubData(gl.COPY_READ_BUFFER, gl.COPY_WRITE_BUFFER, srcOffset, dstOffset, bytes);\r\n }\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ) {\r\n return new WebGLIndexBuffer(this, data, this.parseBufferOptions(options, 'index'));\r\n }\r\n createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options?: BufferCreationOptions,\r\n data?: TypedArray\r\n ) {\r\n return new WebGLStructuredBuffer(this, structureType, this.parseBufferOptions(options), data);\r\n }\r\n createVertexLayout(options: VertexLayoutOptions) {\r\n return new WebGLVertexLayout(this, options);\r\n }\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachement: Nullable<BaseTexture>,\r\n options?: FrameBufferOptions\r\n ) {\r\n return new WebGLFrameBuffer(this, colorAttachments, depthAttachement, options);\r\n }\r\n setBindGroup(index: number, bindGroup: BindGroup, bindGroupOffsets?: Nullable<Iterable<number>>) {\r\n if (bindGroupOffsets && !isWebGL2(this._context)) {\r\n throw new Error(`setBindGroup(): no dynamic offset buffer support for WebGL1 device`);\r\n }\r\n this._currentBindGroups[index] = bindGroup as WebGLBindGroup;\r\n this._currentBindGroupOffsets[index] = bindGroupOffsets || null;\r\n }\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>] {\r\n return [this._currentBindGroups[index], this._currentBindGroupOffsets[index]];\r\n }\r\n // render related\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (vp === null || vp === undefined || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.drawingBufferWidth),\r\n height: this.deviceYToScreen(this.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n this._context.viewport(\r\n this.screenXToDevice(this._currentViewport.x),\r\n this.screenYToDevice(this._currentViewport.y),\r\n this.screenXToDevice(this._currentViewport.width),\r\n this.screenYToDevice(this._currentViewport.height)\r\n );\r\n }\r\n getViewport(): Immutable<DeviceViewport> {\r\n return this._currentViewport;\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.drawingBufferWidth),\r\n height: this.deviceYToScreen(this.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissorRect = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissorRect = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n this._context.scissor(\r\n this.screenXToDevice(this._currentScissorRect.x),\r\n this.screenYToDevice(this._currentScissorRect.y),\r\n this.screenXToDevice(this._currentScissorRect.width),\r\n this.screenYToDevice(this._currentScissorRect.height)\r\n );\r\n }\r\n getScissor(): Immutable<DeviceViewport> {\r\n return this._currentScissorRect;\r\n }\r\n setProgram(program: Nullable<GPUProgram>) {\r\n this._currentProgram = program as WebGLGPUProgram;\r\n }\r\n getProgram() {\r\n return this._currentProgram;\r\n }\r\n setVertexLayout(vertexData: Nullable<VertexLayout>) {\r\n this._currentVertexData = vertexData as WebGLVertexLayout;\r\n }\r\n getVertexLayout() {\r\n return this._currentVertexData;\r\n }\r\n setRenderStates(stateSet: Nullable<RenderStateSet>) {\r\n this._currentStateSet = stateSet as WebGLRenderStateSet;\r\n }\r\n getRenderStates() {\r\n return this._currentStateSet;\r\n }\r\n getFramebuffer() {\r\n return this._context._currentFramebuffer ?? null;\r\n }\r\n reverseVertexWindingOrder(reverse: boolean) {\r\n if (this._reverseWindingOrder !== !!reverse) {\r\n this._reverseWindingOrder = !!reverse;\r\n this._context.frontFace(reverse ? this._context.CW : this._context.CCW);\r\n }\r\n }\r\n isWindingOrderReversed() {\r\n return this._reverseWindingOrder;\r\n }\r\n flush() {\r\n this.context.flush();\r\n }\r\n async readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb ? fb.getColorAttachments()[index] : null;\r\n const format = colorAttachment ? colorAttachment.format : 'rgba8unorm';\r\n let formatInfo = this._readFormats[format];\r\n if (!formatInfo) {\r\n formatInfo = {\r\n format: this.context.getParameter(WebGLEnum.IMPLEMENTATION_COLOR_READ_FORMAT),\r\n type: this.context.getParameter(WebGLEnum.IMPLEMENTATION_COLOR_READ_TYPE)\r\n };\r\n this._readFormats[format] = formatInfo;\r\n }\r\n const glFormat = formatInfo.format;\r\n const glType = formatInfo.type;\r\n const pixelSize = getTextureFormatBlockSize(format);\r\n if (\r\n (glFormat !== WebGLEnum.RGBA ||\r\n (glType !== WebGLEnum.UNSIGNED_BYTE &&\r\n glType !== WebGLEnum.FLOAT &&\r\n glType !== WebGLEnum.HALF_FLOAT)) &&\r\n !isWebGL2(this.context)\r\n ) {\r\n throw new Error(`readPixels() failed: invalid format: ${format}`);\r\n }\r\n const byteSize = w * h * pixelSize;\r\n if (buffer.byteLength < byteSize) {\r\n throw new Error(`readPixels() failed: destination buffer must have at least ${byteSize} bytes`);\r\n }\r\n if (isWebGL2(this.context)) {\r\n const stagingBuffer = this.createBuffer(byteSize, {\r\n usage: 'pack-pixel',\r\n managed: false\r\n });\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, stagingBuffer.object!);\r\n this.context.readBuffer(fb ? WebGLEnum.COLOR_ATTACHMENT0 + index : WebGLEnum.COLOR_ATTACHMENT0);\r\n //this.flush();\r\n this.context.readPixels(x, y, w, h, glFormat, glType, 0);\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, null);\r\n const data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\r\n await stagingBuffer.getBufferSubData(data);\r\n stagingBuffer.dispose();\r\n } else {\r\n this.context.readPixels(x, y, w, h, glFormat, glType, buffer);\r\n }\r\n }\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb ? fb.getColorAttachments()[index] : null;\r\n const format = colorAttachment ? colorAttachment.format : 'rgba8unorm';\r\n let glFormat: number = WebGLEnum.NONE;\r\n let glType: number = WebGLEnum.NONE;\r\n if (!isWebGL2(this.context)) {\r\n throw new Error('readPixels() failed: readPixels() requires webgl2 device');\r\n }\r\n if (isCompressedTextureFormat(format) || hasDepthChannel(format)) {\r\n throw new Error(`readPixels() failed: invalid format: ${format}`);\r\n }\r\n const r = hasRedChannel(format);\r\n const g = hasGreenChannel(format);\r\n const b = hasBlueChannel(format);\r\n const a = hasAlphaChannel(format);\r\n const numChannels = (r ? 1 : 0) + (g ? 1 : 0) + (b ? 1 : 0) + (a ? 1 : 0);\r\n const size = getTextureFormatBlockSize(format) / numChannels;\r\n const integer = isIntegerTextureFormat(format);\r\n const float = isFloatTextureFormat(format);\r\n const signed = isSignedTextureFormat(format);\r\n if (r && g && b && a) {\r\n glFormat = integer ? WebGLEnum.RGBA_INTEGER : WebGLEnum.RGBA;\r\n } else if (r && g) {\r\n glFormat = integer ? WebGLEnum.RG_INTEGER : WebGLEnum.RG;\r\n } else if (r) {\r\n glFormat = integer ? WebGLEnum.RED_INTEGER : WebGLEnum.RED;\r\n }\r\n if (size === 1) {\r\n glType = signed ? WebGLEnum.BYTE : WebGLEnum.UNSIGNED_BYTE;\r\n } else if (size === 2) {\r\n glType = float ? WebGLEnum.HALF_FLOAT : signed ? WebGLEnum.SHORT : WebGLEnum.UNSIGNED_SHORT;\r\n } else if (size === 4) {\r\n glType = float ? WebGLEnum.FLOAT : signed ? WebGLEnum.INT : WebGLEnum.UNSIGNED_INT;\r\n }\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, buffer.object!);\r\n this.context.readBuffer(fb ? WebGLEnum.COLOR_ATTACHMENT0 + index : WebGLEnum.COLOR_ATTACHMENT0);\r\n this.context.readPixels(x, y, w, h, glFormat, glType, 0);\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, null);\r\n }\r\n looseContext() {\r\n if (!this.context.isContextLost()) {\r\n this._loseContextExtension?.loseContext();\r\n }\r\n }\r\n restoreContext() {\r\n if (this.context.isContextLost()) {\r\n this.clearErrors();\r\n this._loseContextExtension?.restoreContext();\r\n const err = this.getError();\r\n if (err) {\r\n console.error(err);\r\n }\r\n }\r\n }\r\n beginCapture() {\r\n if (this._captureRenderBundle) {\r\n throw new Error('Device.beginCapture() failed: device is already capturing draw commands');\r\n }\r\n this._captureRenderBundle = [];\r\n }\r\n endCapture() {\r\n if (!this._captureRenderBundle) {\r\n throw new Error('Device.endCapture() failed: device is not capturing draw commands');\r\n }\r\n const result = this._captureRenderBundle;\r\n this._captureRenderBundle = null;\r\n return result;\r\n }\r\n protected _executeRenderBundle(renderBundle: RenderBundle): number {\r\n for (const drawcall of renderBundle as WebGLRenderBundle) {\r\n this.setProgram(drawcall.program);\r\n this.setVertexLayout(drawcall.vertexLayout);\r\n this.setRenderStates(drawcall.renderStateSet);\r\n for (let i = 0; i < 4; i++) {\r\n this.setBindGroup(i, drawcall.bindGroups[i], drawcall.bindGroupOffsets[i]);\r\n }\r\n if (drawcall.numInstances === 0) {\r\n this.draw(drawcall.primitiveType, drawcall.first, drawcall.count);\r\n } else {\r\n this.drawInstanced(drawcall.primitiveType, drawcall.first, drawcall.count, drawcall.numInstances);\r\n }\r\n }\r\n return (renderBundle as WebGLRenderBundle).length;\r\n }\r\n /** @internal */\r\n protected _setFramebuffer(rt: FrameBuffer) {\r\n if (rt !== this._context._currentFramebuffer) {\r\n this._context._currentFramebuffer?.unbind();\r\n rt?.bind();\r\n }\r\n }\r\n /** @internal */\r\n protected onBeginFrame() {\r\n if (this._contextLost) {\r\n if (!this._context.isContextLost()) {\r\n this._contextLost = false;\r\n this.handleContextRestored();\r\n }\r\n }\r\n return !this._contextLost;\r\n }\r\n nextFrame(callback: () => void) {\r\n return requestAnimationFrame(callback);\r\n }\r\n cancelNextFrame(handle: number) {\r\n cancelAnimationFrame(handle);\r\n }\r\n /** @internal */\r\n protected onEndFrame() {}\r\n /** @internal */\r\n protected _draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n if (this._currentVertexData) {\r\n this._currentVertexData.bind();\r\n if (this._currentProgram) {\r\n if (!this._currentProgram.use()) {\r\n return;\r\n }\r\n for (let i = 0; i < this._currentProgram.bindGroupLayouts.length; i++) {\r\n const bindGroup = this._currentBindGroups[i];\r\n if (bindGroup) {\r\n const offsets = this._currentBindGroupOffsets[i];\r\n bindGroup.apply(this._currentProgram, offsets);\r\n } else {\r\n console.error(\r\n `Missing bind group (${i}) when drawing with program '${this._currentProgram.name}'`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n if (this._currentStateSet) {\r\n this._currentStateSet.apply();\r\n } else {\r\n WebGLRenderStateSet.applyDefaults(this._context);\r\n }\r\n const indexBuffer = this._currentVertexData.indexBuffer;\r\n if (indexBuffer) {\r\n this.context.drawElements(\r\n primitiveTypeMap[primitiveType],\r\n count,\r\n typeMap[indexBuffer.indexType.primitiveType],\r\n first * (indexBuffer.indexType === typeU16 ? 2 : 4)\r\n );\r\n } else {\r\n this.context.drawArrays(primitiveTypeMap[primitiveType], first, count);\r\n }\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (this.getFramebuffer() as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n if (this._captureRenderBundle) {\r\n const rs = this._currentStateSet?.clone() ?? this.createRenderStateSet();\r\n if (this._reverseWindingOrder) {\r\n const rasterState = rs.rasterizerState;\r\n if (!rasterState) {\r\n rs.useRasterizerState().setCullMode('front');\r\n } else if (rasterState.cullMode === 'back') {\r\n rasterState.cullMode = 'front';\r\n } else if (rasterState.cullMode === 'front') {\r\n rasterState.cullMode = 'back';\r\n }\r\n }\r\n this._captureRenderBundle.push({\r\n bindGroups: [...this._currentBindGroups],\r\n bindGroupOffsets: this._currentBindGroupOffsets.map((val) => (val ? [...val] : null)),\r\n program: this._currentProgram,\r\n vertexLayout: this._currentVertexData,\r\n primitiveType: primitiveType,\r\n renderStateSet: rs,\r\n count,\r\n first,\r\n numInstances: 0\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected _drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n if (this.instancedArraysExt && this._currentVertexData) {\r\n this._currentVertexData.bind();\r\n if (this._currentProgram) {\r\n if (!this._currentProgram.use()) {\r\n return;\r\n }\r\n for (let i = 0; i < this._currentProgram.bindGroupLayouts.length; i++) {\r\n const bindGroup = this._currentBindGroups[i];\r\n if (bindGroup) {\r\n const offsets = this._currentBindGroupOffsets[i];\r\n bindGroup.apply(this._currentProgram, offsets);\r\n } else {\r\n console.error(\r\n `Missing bind group (${i}) when drawing with program '${this._currentProgram.name}'`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n this._currentStateSet?.apply();\r\n const indexBuffer = this._currentVertexData.indexBuffer;\r\n if (indexBuffer) {\r\n this.instancedArraysExt.drawElementsInstanced(\r\n primitiveTypeMap[primitiveType],\r\n count,\r\n typeMap[indexBuffer.indexType.primitiveType],\r\n first * (indexBuffer.indexType === typeU16 ? 2 : 4),\r\n numInstances\r\n );\r\n } else {\r\n this.instancedArraysExt.drawArraysInstanced(\r\n primitiveTypeMap[primitiveType],\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.push({\r\n bindGroups: [...this._currentBindGroups],\r\n bindGroupOffsets: this._currentBindGroupOffsets.map((val) => (val ? [...val] : null)),\r\n program: this._currentProgram,\r\n vertexLayout: this._currentVertexData,\r\n primitiveType: primitiveType,\r\n renderStateSet: this._currentStateSet?.clone() ?? null,\r\n count,\r\n first,\r\n numInstances\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n throw new Error('WebGL device does not support compute shader');\r\n }\r\n /** @internal */\r\n private createInstancedArraysEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n vertexAttribDivisor: gl.vertexAttribDivisor.bind(gl),\r\n drawArraysInstanced: gl.drawArraysInstanced.bind(gl),\r\n drawElementsInstanced: gl.drawElementsInstanced.bind(gl)\r\n };\r\n } else {\r\n const extInstancedArray: Nullable<ANGLE_instanced_arrays> = gl.getExtension('ANGLE_instanced_arrays');\r\n return extInstancedArray\r\n ? {\r\n vertexAttribDivisor: extInstancedArray.vertexAttribDivisorANGLE.bind(extInstancedArray),\r\n drawArraysInstanced: extInstancedArray.drawArraysInstancedANGLE.bind(extInstancedArray),\r\n drawElementsInstanced: extInstancedArray.drawElementsInstancedANGLE.bind(extInstancedArray)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private createDrawBuffersEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n drawBuffers: gl.drawBuffers.bind(gl)\r\n };\r\n } else {\r\n const extDrawBuffers: Nullable<WEBGL_draw_buffers> = gl.getExtension('WEBGL_draw_buffers');\r\n return extDrawBuffers\r\n ? {\r\n drawBuffers: extDrawBuffers.drawBuffersWEBGL.bind(extDrawBuffers)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private createVertexArrayObjectEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n createVertexArray: gl.createVertexArray.bind(gl),\r\n bindVertexArray: gl.bindVertexArray.bind(gl),\r\n deleteVertexArray: gl.deleteVertexArray.bind(gl),\r\n isVertexArray: gl.isVertexArray.bind(gl)\r\n };\r\n } else {\r\n const extVAO: Nullable<OES_vertex_array_object> = gl.getExtension('OES_vertex_array_object');\r\n return extVAO\r\n ? {\r\n createVertexArray: extVAO.createVertexArrayOES.bind(extVAO),\r\n bindVertexArray: extVAO.bindVertexArrayOES.bind(extVAO),\r\n deleteVertexArray: extVAO.deleteVertexArrayOES.bind(extVAO),\r\n isVertexArray: extVAO.isVertexArrayOES.bind(extVAO)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private handleContextLost() {\r\n this._isRendering = this.isRendering;\r\n this.invalidateAll();\r\n this.dispatchEvent('devicelost');\r\n }\r\n /** @internal */\r\n private handleContextRestored() {\r\n console.info('handle context restored');\r\n this.initContextState();\r\n this._textureSamplerMap = new WeakMap();\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n\r\n this._samplerCache = new SamplerCache(this);\r\n if (this._isRendering) {\r\n this._isRendering = false;\r\n this.reloadAll();\r\n this.dispatchEvent('devicerestored');\r\n }\r\n }\r\n /** @internal */\r\n private initContextState() {\r\n this._deviceCaps = {\r\n miscCaps: new WebGLMiscCaps(this._context),\r\n framebufferCaps: new WebGLFramebufferCaps(this._context),\r\n shaderCaps: new WebGLShaderCaps(this._context),\r\n textureCaps: new WebGLTextureCaps(this._context)\r\n };\r\n this._vaoExt = this.createVertexArrayObjectEXT();\r\n this._instancedArraysExt = this.createInstancedArraysEXT();\r\n this._drawBuffersExt = this.createDrawBuffersEXT();\r\n this._context.pixelStorei(WebGLEnum.UNPACK_COLORSPACE_CONVERSION_WEBGL, WebGLEnum.NONE);\r\n this._context.pixelStorei(WebGLEnum.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n this._context.enable(WebGLEnum.SCISSOR_TEST);\r\n this.enableGPUTimeRecording(true);\r\n this._context._currentFramebuffer = undefined;\r\n this._context._currentProgram = undefined;\r\n this._deviceUniformBuffers = [];\r\n this._deviceUniformBufferOffsets = [];\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n this._bindSamplers = [];\r\n }\r\n /** @internal */\r\n clearErrors() {\r\n while (this._context.getError()) {\r\n // eat errors\r\n }\r\n }\r\n /** @internal */\r\n getCurrentSamplerForTexture(tex: BaseTexture) {\r\n return this._textureSamplerMap.get(tex);\r\n }\r\n /** @internal */\r\n setCurrentSamplerForTexture(tex: BaseTexture, sampler: Nullable<WebGLTextureSampler>) {\r\n this._textureSamplerMap.set(tex, sampler);\r\n }\r\n getError(throwError?: boolean) {\r\n const errcode = this._context.getError();\r\n const err = errcode === WebGLEnum.NO_ERROR ? null : new WebGLError(errcode);\r\n if (err && throwError) {\r\n throw err;\r\n }\r\n return err;\r\n }\r\n}\r\n\r\nlet webGL1Supported: Nullable<boolean> = null;\r\nlet webGL2Supported: Nullable<boolean> = null;\r\nconst factory = makeObservable(WebGLDevice)<DeviceEventMap>();\r\n\r\nasync function createWebGLDevice(\r\n backend: DeviceBackend,\r\n cvs: HTMLCanvasElement,\r\n options?: DeviceOptions\r\n): Promise<Nullable<AbstractDevice>> {\r\n try {\r\n const device = new factory(backend, cvs, options);\r\n await device.initContext();\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n return device;\r\n } catch (err) {\r\n console.error(err);\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const backend1: DeviceBackend = {\r\n typeName() {\r\n return 'webgl';\r\n },\r\n async supported() {\r\n if (webGL1Supported === null) {\r\n const cvs = document.createElement('canvas');\r\n const gl = cvs.getContext('webgl');\r\n webGL1Supported = !!gl;\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n return webGL1Supported;\r\n },\r\n async createDevice(cvs, options?) {\r\n return createWebGLDevice(this, cvs, options);\r\n }\r\n};\r\n\r\n/** @internal */\r\nexport const backend2: DeviceBackend = {\r\n typeName() {\r\n return 'webgl2';\r\n },\r\n async supported() {\r\n if (webGL2Supported === null) {\r\n const cvs = document.createElement('canvas');\r\n const gl = cvs.getContext('webgl2');\r\n webGL2Supported = !!gl;\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n return webGL2Supported;\r\n },\r\n async createDevice(cvs, options?) {\r\n return createWebGLDevice(this, cvs, options);\r\n }\r\n};\r\n","import { backend1, backend2 } from './device_webgl';\r\n\r\n/**\r\n * The WebGL1 backend\r\n * @public\r\n */\r\nexport const backendWebGL1 = backend1;\r\n\r\n/**\r\n * The WebGL2 backend\r\n * @public\r\n */\r\nexport const backendWebGL2 = backend2;\r\n"],"names":["WebGLEnum","isWebGL2","gl","texStorage2D","WebGLError","Error","errorToString","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","code","blendEquationMap","add","FUNC_ADD","subtract","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","max","FUNC_MAX","min","FUNC_MIN","blendEquationInvMap","blendFuncMap","zero","ZERO","one","ONE","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","BLEND","DST_ALPHA","ONE_MINUS_DST_ALPHA","SRC_COLOR","ONE_MINUS_SRC_COLOR","DST_COLOR","ONE_MINUS_DST_COLOR","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","blendFuncInvMap","SRC_ALPHA_SATURATE","faceModeMap","none","NONE","front","FRONT","back","BACK","faceModeInvMap","cw","CW","ccw","CCW","stencilOpMap","keep","KEEP","replace","REPLACE","incr","INCR","INCR_WRAP","decr","DECR","DECR_WRAP","invert","INVERT","stencilOpInvMap","compareFuncMap","always","ALWAYS","le","LEQUAL","ge","GEQUAL","lt","LESS","gt","GREATER","eq","EQUAL","ne","NOTEQUAL","never","NEVER","compareFuncInvMap","textureWrappingMap","repeat","REPEAT","MIRRORED_REPEAT","clamp","CLAMP_TO_EDGE","typeMap","PBPrimitiveType","BOOL","BVEC2","BOOL_VEC2","BVEC3","BOOL_VEC3","BVEC4","BOOL_VEC4","F32","FLOAT","F32VEC2","FLOAT_VEC2","F32VEC3","FLOAT_VEC3","F32VEC4","FLOAT_VEC4","I8","BYTE","I16","SHORT","I32","INT","I32VEC2","INT_VEC2","I32VEC3","INT_VEC3","I32VEC4","INT_VEC4","U8","UNSIGNED_BYTE","U8_NORM","I8_NORM","U16","UNSIGNED_SHORT","U16_NORM","I16_NORM","U32","UNSIGNED_INT","U32VEC2","UNSIGNED_INT_VEC2","U32VEC3","UNSIGNED_INT_VEC3","U32VEC4","UNSIGNED_INT_VEC4","primitiveTypeMap","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","POINTS","textureTargetMap","TEXTURE_2D","TEXTURE_3D","cube","TEXTURE_CUBE_MAP","TEXTURE_2D_ARRAY","cubeMapFaceMap","CubeFace","PX","TEXTURE_CUBE_MAP_POSITIVE_X","NX","TEXTURE_CUBE_MAP_NEGATIVE_X","PY","TEXTURE_CUBE_MAP_POSITIVE_Y","NY","TEXTURE_CUBE_MAP_NEGATIVE_Y","PZ","TEXTURE_CUBE_MAP_POSITIVE_Z","NZ","TEXTURE_CUBE_MAP_NEGATIVE_Z","textureMagFilterToWebGL","magFilter","NEAREST","LINEAR","textureMinFilterToWebGL","minFilter","mipFilter","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","_uniqueId","WebGLGPUObject","Disposable","_device","_object","_uid","_cid","_name","_restoreHandler","device","genDefaultName","addGPUObject","object","restoreHandler","handler","uid","cid","name","val","lastName","dispatchEvent","isVertexLayout","isFramebuffer","isSampler","isTexture","isTexture2D","isTexture2DArray","isTexture3D","isTextureCube","isTextureVideo","isProgram","isBuffer","isBindGroup","reload","disposed","restoreObject","destroy","restore","onDispose","disposeObject","WebGLBaseTexture","_target","_memCost","_flags","_width","_height","_depth","_format","_mipLevelCount","_samplerOptions","_webgl1fallback","_readFrameBuffers","target","width","height","depth","memCost","format","mipLevelCount","samplerOptions","options","params","getTextureCaps","getTextureFormatInfo","Object","assign","_getSamplerOptions","compare","console","log","isWebGL1Fallback","isFilterable","filterable","isPowerOf2","context","deleteTexture","invalidateBindingTextures","updateVideoMemoryCost","x","fb","dispose","isContextLost","init","getDeviceCaps","textureCaps","isSRGBFormat","isSRGBTextureFormat","isFloatFormat","isFloatTextureFormat","isIntegerFormat","isIntegerTextureFormat","isSignedFormat","isSignedTextureFormat","isCompressedFormat","isCompressedTextureFormat","isDepth","hasDepthChannel","getDefaultSampler","shadow","createSampler","_getFramebufferForRead","faceOrLevel","mipLevel","faceFramebuffers","framebuffer","createFrameBuffer","setColorAttachmentCubeFace","setColorAttachmentLayer","setColorAttachmentMipLevel","setColorAttachmentGenerateMipmaps","allocInternal","numMipLevels","setCurrentSamplerForTexture","_calcMipLevelCount","size","Math","autoMipLevelCount","floor","log2","Number","isInteger","obj","runNextFrame","createTexture","bindTexture","glInternalFormat","texStorage3D","texParameteri","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","w","h","isCompressed","blockWidth","getTextureFormatBlockWidth","blockHeight","getTextureFormatBlockHeight","blockSize","getTextureFormatBlockSize","mip","data","Uint8Array","ceil","fill","face","faceTarget","compressedTexImage2D","texImage2D","glFormat","glType","k","calcMemoryUsage","GPUResourceUsageFlags","TF_NO_MIPMAP","renderable","comparison","addressU","addressV","addressW","lodMin","lodMax","maxAnisotropy","WebGLTexture2D","loadEmpty","update","xOffset","yOffset","pixelStorei","UNPACK_ALIGNMENT","texSubImage2D","generateMipmaps","updateFromElement","y","cvs","document","createElement","ctx","getContext","drawImage","readPixels","buffer","pushDeviceStates","setFramebuffer","result","popDeviceStates","readPixelsToBuffer","loadFromElement","element","sRGB","creationFlags","TF_WRITABLE","error","loadImage","createEmpty","generateMipmap","createWithMipmapData","isCubemap","isVolume","loadLevels","levels","linearTextureFormatToSRGB","swizzle","mipLevels","supportS3TCSRGB","supportS3TC","warn","clearErrors","i","compressedTexSubImage2D","mipDatas","j","t","err","getError","WebGLTexture2DArray","zOffset","texSubImage3D","arraySize","layer","length","compressedTexSubImage3D","layerIndex","WebGLTexture3D","WebGLTextureCube","WebGLTextureVideo","_source","_callbackId","source","cancelVideoFrameCallback","loadElement","el","_x","_y","_w","_h","_faceOrLayer","_mipLevel","_buffer","updateVideoFrame","currentTime","requestVideoFrameCallback","videoWidth","videoHeight","that","cb","WebGLVertexLayout","_vertexData","_dirty","VertexData","vb","vertexBuffers","setVertexBuffer","stepMode","indexBuffer","setIndexBuffer","load","vaoExt","deleteVertexArray","setDrawOffset","byteOffset","info","drawOffset","getVertexBuffer","semantic","getVertexBufferInfo","getIndexBuffer","bind","bindVertexArray","bindBuffers","draw","primitiveType","first","count","setVertexLayout","drawInstanced","numInstances","createVertexArray","loc","bufferInfo","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","instancedArraysExt","vertexAttribPointer","type","cols","scalarType","normalized","stride","offset","vertexAttribDivisor","disableVertexAttribArray","ELEMENT_ARRAY_BUFFER","WebGLGPUBuffer","_size","_usage","_systemMemoryBuffer","_systemMemory","usage","systemMemory","BF_VERTEX","BF_INDEX","BF_UNIFORM","DYNAMIC","MANAGED","byteLength","set","systemMemoryBuffer","bufferSubData","dstByteOffset","srcPos","srcLength","BYTES_PER_ELEMENT","subarray","UNIFORM_BUFFER","BF_READ","BF_WRITE","COPY_WRITE_BUFFER","BF_PACK_PIXEL","BF_UNPACK_PIXEL","PIXEL_PACK_BUFFER","getBufferSubData","dstBuffer","offsetInBytes","sizeInBytes","_getBufferData","sync","fenceSync","SYNC_GPU_COMMANDS_COMPLETE","clientWaitAsync","deleteSync","COPY_READ_BUFFER","PIXEL_UNPACK_BUFFER","deleteBuffer","createBuffer","DYNAMIC_DRAW","STATIC_DRAW","STREAM_READ","bufferData","flags","interval_ms","Promise","resolve","reject","test","res","clientWaitSync","WAIT_FAILED","TIMEOUT_EXPIRED","setTimeout","typeU16","PBPrimitiveTypeInfo","getCachedTypeInfo","typeU32","WebGLIndexBuffer","indexType","Uint16Array","Uint32Array","STATUS_UNCHECKED","STATUS_OK","STATUS_FAILED","WebGLFrameBuffer","_options","_needBindBuffers","_drawTags","_lastDrawTag","_status","_statusAA","_isMRT","_drawBuffers","_hash","_needGenerateMipmaps","_depthAttachmentTarget","_colorAttachmentsAA","_depthAttachmentAA","_intermediateAttachments","_framebufferAA","_initialized","colorAttachments","depthAttachment","opt","findIndex","map","value","texture","level","sampleCount","ignoreDepthStencil","index","COLOR_ATTACHMENT0","hasStencilChannel","DEPTH_STENCIL_ATTACHMENT","DEPTH_ATTACHMENT","colorAttachmentHash","tex","join","depthAttachmentHash","tagDraw","isMRT","invalidateMipmaps","getWidth","attachment","getHeight","getHash","_init","deleteFramebuffer","rb","deleteRenderbuffer","entry","getColorAttachmentGenerateMipmaps","_currentFramebuffer","unbind","getColorAttachmentCubeFace","getColorAttachmentMipLevel","getColorAttachmentLayer","setDepthAttachmentCubeFace","getDepthAttachmentCubeFace","setDepthAttachmentLayer","getDepthAttachmentLayer","getDepthAttachment","getColorAttachments","getColorAttachment","_bindBuffersAA","_bindBuffers","bindFramebuffer","FRAMEBUFFER","drawBuffersExt","drawBuffers","setViewport","setScissor","_updateMSAABuffer","get","tmpFramebuffer","createFramebuffer","framebufferTexture2D","copyTexSubImage2D","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","depthStencilMask","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","readBuffer","blitFramebuffer","COLOR_BUFFER_BIT","_load","_bindAttachment","intermediateTexture","framebufferCaps","supportRenderMipmap","Map","intermediateAttachments","formatInfo","activeTexture","TEXTURE0","framebufferTextureLayer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","_createRenderbufferAA","renderBuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorageMultisample","framebufferRenderbuffer","supportMultisampledFramebuffer","getSampleCount","WebGLRenderState","_defaultState","_currentState","apply","force","c","_apply","defaultState","applyDefaults","WebGLColorState","redMask","greenMask","blueMask","alphaMask","clone","setColorMask","r","g","b","a","colorMask","WebGLBlendingState","_srcBlendRGB","_dstBlendRGB","_srcBlendAlpha","_dstBlendAlpha","_rgbEquation","_alphaEquation","enabled","alphaToCoverageEnabled","srcBlendRGB","dstBlendRGB","srcBlendAlpha","dstBlendAlpha","rgbEquation","alphaEquation","other","enable","enableAlphaToCoverage","setBlendFuncRGB","setBlendFuncAlpha","setBlendEquation","setBlendFunc","src","dest","rgb","alpha","blendEquationSeparate","blendFunc","blendFuncSeparate","disable","SAMPLE_ALPHA_TO_COVERAGE","WebGLRasterizerState","_cullMode","cullMode","setCullMode","mode","depthClampEnabled","enableDepthClamp","CULL_FACE","cullFace","WebGLDepthState","testEnabled","writeEnabled","depthBias","depthBiasSlopeScale","_compareFunc","compareFunc","enableTest","enableWrite","setCompareFunc","setDepthBias","setDepthBiasSlopeScale","func","DEPTH_TEST","depthFunc","depthMask","POLYGON_OFFSET_FILL","polygonOffset","WebGLStencilState","writeMask","ref","readMask","_failOp","_failOpBack","_zFailOp","_zFailOpBack","_passOp","_passOpBack","_func","_funcBack","failOp","failOpBack","zFailOp","zFailOpBack","passOp","passOpBack","funcBack","setWriteMask","setFrontOp","setBackOp","setFrontCompareFunc","setBackCompareFunc","setReference","setReadMask","mask","fail","zfail","zpass","STENCIL_TEST","stencilMaskSeparate","stencilFuncSeparate","stencilOpSeparate","WebGLRenderStateSet","_gl","colorState","blendingState","rasterizerState","depthState","stencilState","newStateSet","copyFrom","stateSet","useColorState","state","defaultColorState","useBlendingState","defaultBlendingState","useRasterizerState","defaultRasterizerState","useDepthState","defaultDepthState","useStencilState","defaultStencilState","GPU_DISJOINT_EXT","TIME_ELAPSED_EXT","GPUTimer","_query","_state","_timerQuery","_gpuTime","ext","getExtension","createQuery","deleteQuery","beginQuery","endQuery","isQuery","getQuery","getQueryObject","getQueryParameter","queryCounter","queryCounterEXT","createQueryEXT","deleteQueryEXT","beginQueryEXT","endQueryEXT","isQueryEXT","getQueryEXT","getQueryObjectEXT","gpuTimerSupported","begin","end","ended","elapsed","QUERY_RESULT_AVAILABLE","gpuTimerDisjoint","getParameter","QUERY_RESULT","WebGLFramebufferCaps","_isWebGL2","_extDrawBuffers","_extFloatBlending","_extRenderMipmap","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","MAX_COLOR_ATTACHMENTS","MAX_DRAW_BUFFERS","WebGLMiscCaps","_extIndexUint32","_extBlendMinMax","supportOversizedViewport","supportBlendMinMax","support32BitIndex","supportDepthClamp","maxBindGroups","maxTexCoordIndex","WebGLShaderCaps","_extFragDepth","_extStandardDerivatives","_extShaderTextureLod","supportFragmentDepth","supportStandardDerivatives","supportShaderTextureLod","supportHighPrecisionFloat","maxUniformBufferSize","uniformBufferOffsetAlignment","maxStorageBufferSize","storageBufferOffsetAlignment","MAX_UNIFORM_BLOCK_SIZE","UNIFORM_BUFFER_OFFSET_ALIGNMENT","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","precision","FRAGMENT_SHADER","WebGLTextureCaps","_extS3TC","_extS3TCSRGB","_extBPTC","_extRGTC","_extASTC","_extTextureFilterAnisotropic","_extDepthTexture","_extSRGB","_extTextureFloat","_extTextureFloatLinear","_extTextureHalfFloat","_extTextureHalfFloatLinear","_textureFormatInfos","maxTextureSize","maxCubeTextureSize","npo2Mipmapping","npo2Repeating","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","rgba8unorm","RGBA","RGBA8","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","compressed","split","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","RED","R8","R8_SNORM","R16F","HALF_FLOAT","R32F","RED_INTEGER","R8UI","R8I","R16UI","R16I","R32UI","R32I","RG","RG8","RG8_SNORM","RG16F","RG32F","RG8UI","RG8I","RG16UI","RG16I","RG32UI","RG32I","SRGB8_ALPHA8","RGBA8_SNORM","RGBA16F","RGBA32F","RGBA_INTEGER","RGBA8UI","RGBA8I","RGBA16UI","RGBA16I","RGBA32UI","RGBA32I","RGB","R11F_G11F_B10F","UNSIGNED_INT_10F_11F_11F_REV","DEPTH_COMPONENT","DEPTH_COMPONENT16","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","DEPTH_STENCIL","DEPTH24_STENCIL8","UNSIGNED_INT_24_8","DEPTH32F_STENCIL8","FLOAT_32_UNSIGNED_INT_24_8_REV","SRGB_ALPHA","numPixels","WebGLStructuredBuffer","_structure","_data","structure","isStructType","structMembers","isArrayType","isValidArrayElementType","elementType","layout","toBufferLayout","byteSize","useSystemMemory","StructuredBufferData","st","isCompatibleType","getUniformData","isPrimitiveType","isMatrixType","member","WebGLBindGroup","_layout","_dynamicOffsets","_resources","_createdBuffers","entries","hasDynamicOffset","dynamicOffsetIndex","getGPUId","String","getLayout","getBuffer","nocreate","_getBuffer","getDynamicOffsets","setBuffer","_bindOffset","_bindSize","bindName","nameMap","setRawData","mappedName","setValue","setTextureView","_value","_level","_face","_mipCount","_sampler","getTexture","_findTextureLayout","setTexture","sampler","autoBindSamplerComparison","setSampler","program","offsets","webgl2","dynamicOffsets","setBlock","structName","setUniform","uniforms","Array","isArray","createStructuredBuffer","push","storageTexture","externalTexture","WebGLGPUProgram","_vs","_fs","_unitCounter","_uniformSetters","_uniformInfo","_blockInfo","_bindGroupLayouts","_vertexAttributes","_error","_vertexShader","_fragmentShader","vertexShader","fragmentShader","bindGroupLayouts","vertexAttributes","createProgram","getCompileError","getShaderSource","kind","getBindingInfo","group","binding","bindingPoint","setter","proto","getPrototypeOf","_setUniformStruct","_setUniformArray","bindUniformBuffer","deleteProgram","use","_currentProgram","checkLoad","createUniformBuffer","uniform","createShader","attachShader","shaderSource","compileShader","semanticList","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","getProgramInfoLog","deleteShader","useProgram","createUniformSetters","createUniformSetter","location","getUniformSetterfv","getUniformSetter2fv","getUniformSetter3fv","getUniformSetter4fv","getUniformSetteriv","getUniformSetter2iv","getUniformSetter3iv","getUniformSetter4iv","getUniformSetteruiv","getUniformSetter2uiv","getUniformSetter3uiv","getUniformSetter4uiv","FLOAT_MAT2","getUniformSetterMatrix2","FLOAT_MAT2x3","getUniformSetterMatrix23","FLOAT_MAT2x4","getUniformSetterMatrix24","FLOAT_MAT3","getUniformSetterMatrix3","FLOAT_MAT3x2","getUniformSetterMatrix32","FLOAT_MAT3x4","getUniformSetterMatrix34","FLOAT_MAT4","getUniformSetterMatrix4","FLOAT_MAT4x2","getUniformSetterMatrix42","FLOAT_MAT4x3","getUniformSetterMatrix43","SAMPLER_2D","SAMPLER_2D_SHADOW","INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_2D","unit","uniform1i","getSamplerSetter","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D_ARRAY","SAMPLER_CUBE","SAMPLER_CUBE_SHADOW","INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_CUBE","SAMPLER_3D","INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_3D","uniformSetters","numUniforms","ACTIVE_UNIFORMS","getActiveUniform","startsWith","substr","blockIndex","getUniformLocation","view","ctor","viewCtor","elementSize","viewElementSize","getTypedArrayInfo","uniformInfo","numBlocks","ACTIVE_UNIFORM_BLOCKS","getActiveUniformBlockName","getUniformBlockIndex","usedInVS","getActiveUniformBlockParameter","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","usedInFS","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","used","UNIFORM_BLOCK_DATA_SIZE","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformBlockBinding","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformMatrix2fv","uniformMatrix2x3fv","uniformMatrix2x4fv","uniformMatrix3x2fv","uniformMatrix3fv","uniformMatrix3x4fv","uniformMatrix4x2fv","uniformMatrix4x3fv","uniformMatrix4fv","Int32Array","Float32Array","WebGLTextureSampler","addressModeU","addressModeV","addressModeW","deleteSampler","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","texParameterf","TEXTURE_MAX_ANISOTROPY","samplerParameteri","TEXTURE_WRAP_R","samplerParameterf","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","TEXTURE_COMPARE_FUNC","SamplerCache","_samplers","fetchSampler","hash","tempInt32Array","tempUint32Array","WebGLDevice","BaseDevice","_context","_msaaSampleCount","_loseContextExtension","_contextLost","_isRendering","_reverseWindingOrder","_deviceCaps","_vaoExt","_instancedArraysExt","_drawBuffersExt","_currentVertexData","_currentStateSet","_currentBindGroups","_currentBindGroupOffsets","_currentViewport","_currentScissorRect","_samplerCache","_textureSamplerMap","_captureRenderBundle","_deviceUniformBuffers","_deviceUniformBufferOffsets","_bindTextures","_bindSamplers","_readFormats","_adapterInfo","backend","dpr","msaa","canvas","backend1","antialias","stencil","premultipliedAlpha","vendor","VENDOR","renderer","RENDERER","version","VERSION","deviceXToScreen","deviceYToScreen","default","WeakMap","addEventListener","evt","preventDefault","handleContextLost","handleContextRestored","getAdapterInfo","getFrameBufferSampleCount","getFramebuffer","drawingBufferWidth","getDrawingBufferWidth","drawingBufferHeight","getDrawingBufferHeight","clientWidth","clientHeight","getBackBufferWidth","getBackBufferHeight","samp","bindSampler","fallback","bindBufferRange","bindBufferBase","initContext","initContextState","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","style","clearFrameBuffer","clearColor","clearDepth","clearStencil","colorFlag","depthFlag","stencilFlag","clearBufferfi","attachments","clearBufferiv","COLOR","clearBufferuiv","clearBufferfv","clear","createGPUTimer","createRenderStateSet","createBlendingState","createColorState","createRasterizerState","createDepthState","createStencilState","createTextureFromMipmapData","parseTextureOptions","createTexture2D","createTexture2DFromImage","createTexture2DArray","createTexture2DArrayFromImages","elements","createTexture3D","createCubeTexture","createTextureVideo","copyFramebufferToTexture2D","dst","srcLevel","srcWidth","srcHeight","dstWidth","dstHeight","copyTexture2D","dstLevel","createGPUProgram","renderProgramParams","vs","fs","createBindGroup","parseBufferOptions","copyBuffer","sourceBuffer","destBuffer","srcOffset","dstOffset","bytes","copyBufferSubData","createIndexBuffer","structureType","createVertexLayout","depthAttachement","setBindGroup","bindGroup","bindGroupOffsets","getBindGroup","vp","undefined","viewport","screenXToDevice","screenYToDevice","getViewport","scissor","getScissor","setProgram","getProgram","vertexData","getVertexLayout","setRenderStates","getRenderStates","reverseVertexWindingOrder","reverse","frontFace","isWindingOrderReversed","flush","colorAttachment","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","pixelSize","stagingBuffer","managed","hasRedChannel","hasGreenChannel","hasBlueChannel","hasAlphaChannel","numChannels","integer","float","signed","RG_INTEGER","looseContext","loseContext","restoreContext","beginCapture","endCapture","_executeRenderBundle","renderBundle","drawcall","vertexLayout","renderStateSet","bindGroups","_setFramebuffer","rt","nextFrame","callback","requestAnimationFrame","cancelNextFrame","handle","cancelAnimationFrame","onEndFrame","drawElements","drawArrays","rs","rasterState","_drawInstanced","drawElementsInstanced","drawArraysInstanced","extInstancedArray","vertexAttribDivisorANGLE","drawArraysInstancedANGLE","drawElementsInstancedANGLE","extDrawBuffers","drawBuffersWEBGL","isVertexArray","extVAO","createVertexArrayOES","bindVertexArrayOES","deleteVertexArrayOES","isVertexArrayOES","isRendering","invalidateAll","reloadAll","miscCaps","shaderCaps","createVertexArrayObjectEXT","createInstancedArraysEXT","createDrawBuffersEXT","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","SCISSOR_TEST","enableGPUTimeRecording","getCurrentSamplerForTexture","throwError","errcode","webGL1Supported","webGL2Supported","factory","makeObservable","createWebGLDevice","typeName","supported","createDevice","backend2","backendWebGL1","backendWebGL2"],"mappings":"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"}
1
+ {"version":3,"file":"zephyr3d_backend-webgl.js","sources":["../../../../libs/backend-webgl/src/webgl_enum.ts","../../../../libs/backend-webgl/src/utils.ts","../../../../libs/backend-webgl/src/constants_webgl.ts","../../../../libs/backend-webgl/src/gpuobject_webgl.ts","../../../../libs/backend-webgl/src/basetexture_webgl.ts","../../../../libs/backend-webgl/src/texture2d_webgl.ts","../../../../libs/backend-webgl/src/texture2darray_webgl.ts","../../../../libs/backend-webgl/src/texture3d_webgl.ts","../../../../libs/backend-webgl/src/texturecube_webgl.ts","../../../../libs/backend-webgl/src/texturevideo_webgl.ts","../../../../libs/backend-webgl/src/vertexlayout_webgl.ts","../../../../libs/backend-webgl/src/buffer_webgl.ts","../../../../libs/backend-webgl/src/indexbuffer_webgl.ts","../../../../libs/backend-webgl/src/framebuffer_webgl.ts","../../../../libs/backend-webgl/src/renderstate_webgl.ts","../../../../libs/backend-webgl/src/gpu_timer.ts","../../../../libs/backend-webgl/src/capabilities_webgl.ts","../../../../libs/backend-webgl/src/structuredbuffer_webgl.ts","../../../../libs/backend-webgl/src/bindgroup_webgl.ts","../../../../libs/backend-webgl/src/gpuprogram_webgl.ts","../../../../libs/backend-webgl/src/sampler_webgl.ts","../../../../libs/backend-webgl/src/sampler_cache.ts","../../../../libs/backend-webgl/src/device_webgl.ts","../../../../libs/backend-webgl/src/index.ts"],"sourcesContent":["/**\r\n * WebGL constant value definitions\r\n */\r\n\r\nexport enum WebGLEnum {\r\n READ_BUFFER = 0xc02,\r\n UNPACK_ROW_LENGTH = 0xcf2,\r\n UNPACK_SKIP_ROWS = 0xcf3,\r\n UNPACK_SKIP_PIXELS = 0xcf4,\r\n PACK_ROW_LENGTH = 0xd02,\r\n PACK_SKIP_ROWS = 0xd03,\r\n PACK_SKIP_PIXELS = 0xd04,\r\n COLOR = 0x1800,\r\n DEPTH = 0x1801,\r\n STENCIL = 0x1802,\r\n RED = 0x1903,\r\n RGB8 = 0x8051,\r\n RGBA8 = 0x8058,\r\n RGB10_A2 = 0x8059,\r\n TEXTURE_BINDING_3D = 0x806a,\r\n UNPACK_SKIP_IMAGES = 0x806d,\r\n UNPACK_IMAGE_HEIGHT = 0x806e,\r\n TEXTURE_3D = 0x806f,\r\n TEXTURE_WRAP_R = 0x8072,\r\n MAX_3D_TEXTURE_SIZE = 0x8073,\r\n UNSIGNED_INT_2_10_10_10_REV = 0x8368,\r\n MAX_ELEMENTS_VERTICES = 0x80e8,\r\n MAX_ELEMENTS_INDICES = 0x80e9,\r\n TEXTURE_MIN_LOD = 0x813a,\r\n TEXTURE_MAX_LOD = 0x813b,\r\n TEXTURE_BASE_LEVEL = 0x813c,\r\n TEXTURE_MAX_LEVEL = 0x813d,\r\n MIN = 0x8007,\r\n MAX = 0x8008,\r\n DEPTH_COMPONENT24 = 0x81a6,\r\n MAX_TEXTURE_LOD_BIAS = 0x84fd,\r\n TEXTURE_COMPARE_MODE = 0x884c,\r\n TEXTURE_COMPARE_FUNC = 0x884d,\r\n CURRENT_QUERY = 0x8865,\r\n QUERY_RESULT = 0x8866,\r\n QUERY_RESULT_AVAILABLE = 0x8867,\r\n STREAM_READ = 0x88e1,\r\n STREAM_COPY = 0x88e2,\r\n STATIC_READ = 0x88e5,\r\n STATIC_COPY = 0x88e6,\r\n DYNAMIC_READ = 0x88e9,\r\n DYNAMIC_COPY = 0x88ea,\r\n MAX_DRAW_BUFFERS = 0x8824,\r\n DRAW_BUFFER0 = 0x8825,\r\n DRAW_BUFFER1 = 0x8826,\r\n DRAW_BUFFER2 = 0x8827,\r\n DRAW_BUFFER3 = 0x8828,\r\n DRAW_BUFFER4 = 0x8829,\r\n DRAW_BUFFER5 = 0x882a,\r\n DRAW_BUFFER6 = 0x882b,\r\n DRAW_BUFFER7 = 0x882c,\r\n DRAW_BUFFER8 = 0x882d,\r\n DRAW_BUFFER9 = 0x882e,\r\n DRAW_BUFFER10 = 0x882f,\r\n DRAW_BUFFER11 = 0x8830,\r\n DRAW_BUFFER12 = 0x8831,\r\n DRAW_BUFFER13 = 0x8832,\r\n DRAW_BUFFER14 = 0x8833,\r\n DRAW_BUFFER15 = 0x8834,\r\n MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8b49,\r\n MAX_VERTEX_UNIFORM_COMPONENTS = 0x8b4a,\r\n SAMPLER_3D = 0x8b5f,\r\n SAMPLER_2D_SHADOW = 0x8b62,\r\n FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b,\r\n PIXEL_PACK_BUFFER = 0x88eb,\r\n PIXEL_UNPACK_BUFFER = 0x88ec,\r\n PIXEL_PACK_BUFFER_BINDING = 0x88ed,\r\n PIXEL_UNPACK_BUFFER_BINDING = 0x88ef,\r\n FLOAT_MAT2x3 = 0x8b65,\r\n FLOAT_MAT2x4 = 0x8b66,\r\n FLOAT_MAT3x2 = 0x8b67,\r\n FLOAT_MAT3x4 = 0x8b68,\r\n FLOAT_MAT4x2 = 0x8b69,\r\n FLOAT_MAT4x3 = 0x8b6a,\r\n SRGB = 0x8c40,\r\n SRGB8 = 0x8c41,\r\n SRGB_ALPHA = 0x8c42,\r\n SRGB8_ALPHA8 = 0x8c43,\r\n COMPARE_REF_TO_TEXTURE = 0x884e,\r\n RGBA32F = 0x8814,\r\n RGB32F = 0x8815,\r\n RGBA16F = 0x881a,\r\n RGB16F = 0x881b,\r\n VERTEX_ATTRIB_ARRAY_INTEGER = 0x88fd,\r\n MAX_ARRAY_TEXTURE_LAYERS = 0x88ff,\r\n MIN_PROGRAM_TEXEL_OFFSET = 0x8904,\r\n MAX_PROGRAM_TEXEL_OFFSET = 0x8905,\r\n MAX_VARYING_COMPONENTS = 0x8b4b,\r\n TEXTURE_2D_ARRAY = 0x8c1a,\r\n TEXTURE_BINDING_2D_ARRAY = 0x8c1d,\r\n R11F_G11F_B10F = 0x8c3a,\r\n UNSIGNED_INT_10F_11F_11F_REV = 0x8c3b,\r\n RGB9_E5 = 0x8c3d,\r\n UNSIGNED_INT_5_9_9_9_REV = 0x8c3e,\r\n TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8c7f,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8c80,\r\n TRANSFORM_FEEDBACK_VARYINGS = 0x8c83,\r\n TRANSFORM_FEEDBACK_BUFFER_START = 0x8c84,\r\n TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8c85,\r\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88,\r\n RASTERIZER_DISCARD = 0x8c89,\r\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8c8a,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8c8b,\r\n INTERLEAVED_ATTRIBS = 0x8c8c,\r\n SEPARATE_ATTRIBS = 0x8c8d,\r\n TRANSFORM_FEEDBACK_BUFFER = 0x8c8e,\r\n TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8c8f,\r\n RGBA32UI = 0x8d70,\r\n RGB32UI = 0x8d71,\r\n RGBA16UI = 0x8d76,\r\n RGB16UI = 0x8d77,\r\n RGBA8UI = 0x8d7c,\r\n RGB8UI = 0x8d7d,\r\n RGBA32I = 0x8d82,\r\n RGB32I = 0x8d83,\r\n RGBA16I = 0x8d88,\r\n RGB16I = 0x8d89,\r\n RGBA8I = 0x8d8e,\r\n RGB8I = 0x8d8f,\r\n RED_INTEGER = 0x8d94,\r\n RGB_INTEGER = 0x8d98,\r\n RGBA_INTEGER = 0x8d99,\r\n SAMPLER_2D_ARRAY = 0x8dc1,\r\n SAMPLER_2D_ARRAY_SHADOW = 0x8dc4,\r\n SAMPLER_CUBE_SHADOW = 0x8dc5,\r\n UNSIGNED_INT_VEC2 = 0x8dc6,\r\n UNSIGNED_INT_VEC3 = 0x8dc7,\r\n UNSIGNED_INT_VEC4 = 0x8dc8,\r\n INT_SAMPLER_2D = 0x8dca,\r\n INT_SAMPLER_3D = 0x8dcb,\r\n INT_SAMPLER_CUBE = 0x8dcc,\r\n INT_SAMPLER_2D_ARRAY = 0x8dcf,\r\n UNSIGNED_INT_SAMPLER_2D = 0x8dd2,\r\n UNSIGNED_INT_SAMPLER_3D = 0x8dd3,\r\n UNSIGNED_INT_SAMPLER_CUBE = 0x8dd4,\r\n UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8dd7,\r\n DEPTH_COMPONENT32F = 0x8cac,\r\n DEPTH32F_STENCIL8 = 0x8cad,\r\n FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8dad,\r\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210,\r\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211,\r\n FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212,\r\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213,\r\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214,\r\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215,\r\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216,\r\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217,\r\n FRAMEBUFFER_DEFAULT = 0x8218,\r\n UNSIGNED_INT_24_8 = 0x84fa,\r\n DEPTH24_STENCIL8 = 0x88f0,\r\n UNSIGNED_NORMALIZED = 0x8c17,\r\n DRAW_FRAMEBUFFER_BINDING = 0x8ca6,\r\n READ_FRAMEBUFFER = 0x8ca8,\r\n DRAW_FRAMEBUFFER = 0x8ca9,\r\n READ_FRAMEBUFFER_BINDING = 0x8caa,\r\n RENDERBUFFER_SAMPLES = 0x8cab,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8cd4,\r\n MAX_COLOR_ATTACHMENTS = 0x8cdf,\r\n COLOR_ATTACHMENT1 = 0x8ce1,\r\n COLOR_ATTACHMENT2 = 0x8ce2,\r\n COLOR_ATTACHMENT3 = 0x8ce3,\r\n COLOR_ATTACHMENT4 = 0x8ce4,\r\n COLOR_ATTACHMENT5 = 0x8ce5,\r\n COLOR_ATTACHMENT6 = 0x8ce6,\r\n COLOR_ATTACHMENT7 = 0x8ce7,\r\n COLOR_ATTACHMENT8 = 0x8ce8,\r\n COLOR_ATTACHMENT9 = 0x8ce9,\r\n COLOR_ATTACHMENT10 = 0x8cea,\r\n COLOR_ATTACHMENT11 = 0x8ceb,\r\n COLOR_ATTACHMENT12 = 0x8cec,\r\n COLOR_ATTACHMENT13 = 0x8ced,\r\n COLOR_ATTACHMENT14 = 0x8cee,\r\n COLOR_ATTACHMENT15 = 0x8cef,\r\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8d56,\r\n MAX_SAMPLES = 0x8d57,\r\n HALF_FLOAT = 0x8d61,\r\n RG = 0x8227,\r\n RG_INTEGER = 0x8228,\r\n R8 = 0x8229,\r\n RG8 = 0x822b,\r\n R16F = 0x822d,\r\n R32F = 0x822e,\r\n RG16F = 0x822f,\r\n RG32F = 0x8230,\r\n R8I = 0x8231,\r\n R8UI = 0x8232,\r\n R16I = 0x8233,\r\n R16UI = 0x8234,\r\n R32I = 0x8235,\r\n R32UI = 0x8236,\r\n RG8I = 0x8237,\r\n RG8UI = 0x8238,\r\n RG16I = 0x8239,\r\n RG16UI = 0x823a,\r\n RG32I = 0x823b,\r\n RG32UI = 0x823c,\r\n VERTEX_ARRAY_BINDING = 0x85b5,\r\n R8_SNORM = 0x8f94,\r\n RG8_SNORM = 0x8f95,\r\n RGB8_SNORM = 0x8f96,\r\n RGBA8_SNORM = 0x8f97,\r\n SIGNED_NORMALIZED = 0x8f9c,\r\n COPY_READ_BUFFER = 0x8f36,\r\n COPY_WRITE_BUFFER = 0x8f37,\r\n COPY_READ_BUFFER_BINDING = 0x8f36,\r\n COPY_WRITE_BUFFER_BINDING = 0x8f37,\r\n UNIFORM_BUFFER = 0x8a11,\r\n UNIFORM_BUFFER_BINDING = 0x8a28,\r\n UNIFORM_BUFFER_START = 0x8a29,\r\n UNIFORM_BUFFER_SIZE = 0x8a2a,\r\n MAX_VERTEX_UNIFORM_BLOCKS = 0x8a2b,\r\n MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8a2d,\r\n MAX_COMBINED_UNIFORM_BLOCKS = 0x8a2e,\r\n MAX_UNIFORM_BUFFER_BINDINGS = 0x8a2f,\r\n MAX_UNIFORM_BLOCK_SIZE = 0x8a30,\r\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8a31,\r\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8a33,\r\n UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8a34,\r\n ACTIVE_UNIFORM_BLOCKS = 0x8a36,\r\n UNIFORM_TYPE = 0x8a37,\r\n UNIFORM_SIZE = 0x8a38,\r\n UNIFORM_BLOCK_INDEX = 0x8a3a,\r\n UNIFORM_OFFSET = 0x8a3b,\r\n UNIFORM_ARRAY_STRIDE = 0x8a3c,\r\n UNIFORM_MATRIX_STRIDE = 0x8a3d,\r\n UNIFORM_IS_ROW_MAJOR = 0x8a3e,\r\n UNIFORM_BLOCK_BINDING = 0x8a3f,\r\n UNIFORM_BLOCK_DATA_SIZE = 0x8a40,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8a42,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8a43,\r\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8a44,\r\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8a46,\r\n INVALID_INDEX = 0xffffffff,\r\n MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122,\r\n MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125,\r\n MAX_SERVER_WAIT_TIMEOUT = 0x9111,\r\n OBJECT_TYPE = 0x9112,\r\n SYNC_CONDITION = 0x9113,\r\n SYNC_STATUS = 0x9114,\r\n SYNC_FLAGS = 0x9115,\r\n SYNC_FENCE = 0x9116,\r\n SYNC_GPU_COMMANDS_COMPLETE = 0x9117,\r\n UNSIGNALED = 0x9118,\r\n SIGNALED = 0x9119,\r\n ALREADY_SIGNALED = 0x911a,\r\n TIMEOUT_EXPIRED = 0x911b,\r\n CONDITION_SATISFIED = 0x911c,\r\n WAIT_FAILED = 0x911d,\r\n SYNC_FLUSH_COMMANDS_BIT = 0x1,\r\n VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88fe,\r\n ANY_SAMPLES_PASSED = 0x8c2f,\r\n ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a,\r\n SAMPLER_BINDING = 0x8919,\r\n RGB10_A2UI = 0x906f,\r\n INT_2_10_10_10_REV = 0x8d9f,\r\n TRANSFORM_FEEDBACK = 0x8e22,\r\n TRANSFORM_FEEDBACK_PAUSED = 0x8e23,\r\n TRANSFORM_FEEDBACK_ACTIVE = 0x8e24,\r\n TRANSFORM_FEEDBACK_BINDING = 0x8e25,\r\n TEXTURE_IMMUTABLE_FORMAT = 0x912f,\r\n MAX_ELEMENT_INDEX = 0x8d6b,\r\n TEXTURE_IMMUTABLE_LEVELS = 0x82df,\r\n MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247,\r\n DEPTH_BUFFER_BIT = 0x100,\r\n STENCIL_BUFFER_BIT = 0x400,\r\n COLOR_BUFFER_BIT = 0x4000,\r\n POINTS = 0x0,\r\n LINES = 0x1,\r\n LINE_LOOP = 0x2,\r\n LINE_STRIP = 0x3,\r\n TRIANGLES = 0x4,\r\n TRIANGLE_STRIP = 0x5,\r\n TRIANGLE_FAN = 0x6,\r\n ZERO = 0x0,\r\n ONE = 0x1,\r\n SRC_COLOR = 0x300,\r\n ONE_MINUS_SRC_COLOR = 0x301,\r\n SRC_ALPHA = 0x302,\r\n ONE_MINUS_SRC_ALPHA = 0x303,\r\n DST_ALPHA = 0x304,\r\n ONE_MINUS_DST_ALPHA = 0x305,\r\n DST_COLOR = 0x306,\r\n ONE_MINUS_DST_COLOR = 0x307,\r\n SRC_ALPHA_SATURATE = 0x308,\r\n FUNC_ADD = 0x8006,\r\n FUNC_MIN = 0x8007,\r\n FUNC_MAX = 0x8008,\r\n BLEND_EQUATION = 0x8009,\r\n BLEND_EQUATION_RGB = 0x8009,\r\n BLEND_EQUATION_ALPHA = 0x883d,\r\n FUNC_SUBTRACT = 0x800a,\r\n FUNC_REVERSE_SUBTRACT = 0x800b,\r\n BLEND_DST_RGB = 0x80c8,\r\n BLEND_SRC_RGB = 0x80c9,\r\n BLEND_DST_ALPHA = 0x80ca,\r\n BLEND_SRC_ALPHA = 0x80cb,\r\n CONSTANT_COLOR = 0x8001,\r\n ONE_MINUS_CONSTANT_COLOR = 0x8002,\r\n CONSTANT_ALPHA = 0x8003,\r\n ONE_MINUS_CONSTANT_ALPHA = 0x8004,\r\n BLEND_COLOR = 0x8005,\r\n ARRAY_BUFFER = 0x8892,\r\n ELEMENT_ARRAY_BUFFER = 0x8893,\r\n ARRAY_BUFFER_BINDING = 0x8894,\r\n ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,\r\n STREAM_DRAW = 0x88e0,\r\n STATIC_DRAW = 0x88e4,\r\n DYNAMIC_DRAW = 0x88e8,\r\n BUFFER_SIZE = 0x8764,\r\n BUFFER_USAGE = 0x8765,\r\n CURRENT_VERTEX_ATTRIB = 0x8626,\r\n FRONT = 0x404,\r\n BACK = 0x405,\r\n FRONT_AND_BACK = 0x408,\r\n TEXTURE_2D = 0xde1,\r\n CULL_FACE = 0xb44,\r\n BLEND = 0xbe2,\r\n DITHER = 0xbd0,\r\n STENCIL_TEST = 0xb90,\r\n DEPTH_TEST = 0xb71,\r\n SCISSOR_TEST = 0xc11,\r\n POLYGON_OFFSET_FILL = 0x8037,\r\n SAMPLE_ALPHA_TO_COVERAGE = 0x809e,\r\n SAMPLE_COVERAGE = 0x80a0,\r\n NO_ERROR = 0x0,\r\n INVALID_ENUM = 0x500,\r\n INVALID_VALUE = 0x501,\r\n INVALID_OPERATION = 0x502,\r\n OUT_OF_MEMORY = 0x505,\r\n CW = 0x900,\r\n CCW = 0x901,\r\n LINE_WIDTH = 0xb21,\r\n ALIASED_POINT_SIZE_RANGE = 0x846d,\r\n ALIASED_LINE_WIDTH_RANGE = 0x846e,\r\n CULL_FACE_MODE = 0xb45,\r\n FRONT_FACE = 0xb46,\r\n DEPTH_RANGE = 0xb70,\r\n DEPTH_WRITEMASK = 0xb72,\r\n DEPTH_CLEAR_VALUE = 0xb73,\r\n DEPTH_FUNC = 0xb74,\r\n STENCIL_CLEAR_VALUE = 0xb91,\r\n STENCIL_FUNC = 0xb92,\r\n STENCIL_FAIL = 0xb94,\r\n STENCIL_PASS_DEPTH_FAIL = 0xb95,\r\n STENCIL_PASS_DEPTH_PASS = 0xb96,\r\n STENCIL_REF = 0xb97,\r\n STENCIL_VALUE_MASK = 0xb93,\r\n STENCIL_WRITEMASK = 0xb98,\r\n STENCIL_BACK_FUNC = 0x8800,\r\n STENCIL_BACK_FAIL = 0x8801,\r\n STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,\r\n STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,\r\n STENCIL_BACK_REF = 0x8ca3,\r\n STENCIL_BACK_VALUE_MASK = 0x8ca4,\r\n STENCIL_BACK_WRITEMASK = 0x8ca5,\r\n VIEWPORT = 0xba2,\r\n SCISSOR_BOX = 0xc10,\r\n COLOR_CLEAR_VALUE = 0xc22,\r\n COLOR_WRITEMASK = 0xc23,\r\n UNPACK_ALIGNMENT = 0xcf5,\r\n PACK_ALIGNMENT = 0xd05,\r\n MAX_TEXTURE_SIZE = 0xd33,\r\n MAX_VIEWPORT_DIMS = 0xd3a,\r\n SUBPIXEL_BITS = 0xd50,\r\n RED_BITS = 0xd52,\r\n GREEN_BITS = 0xd53,\r\n BLUE_BITS = 0xd54,\r\n ALPHA_BITS = 0xd55,\r\n DEPTH_BITS = 0xd56,\r\n STENCIL_BITS = 0xd57,\r\n POLYGON_OFFSET_UNITS = 0x2a00,\r\n POLYGON_OFFSET_FACTOR = 0x8038,\r\n TEXTURE_BINDING_2D = 0x8069,\r\n SAMPLE_BUFFERS = 0x80a8,\r\n SAMPLES = 0x80a9,\r\n SAMPLE_COVERAGE_VALUE = 0x80aa,\r\n SAMPLE_COVERAGE_INVERT = 0x80ab,\r\n COMPRESSED_TEXTURE_FORMATS = 0x86a3,\r\n DONT_CARE = 0x1100,\r\n FASTEST = 0x1101,\r\n NICEST = 0x1102,\r\n GENERATE_MIPMAP_HINT = 0x8192,\r\n BYTE = 0x1400,\r\n UNSIGNED_BYTE = 0x1401,\r\n SHORT = 0x1402,\r\n UNSIGNED_SHORT = 0x1403,\r\n INT = 0x1404,\r\n UNSIGNED_INT = 0x1405,\r\n FLOAT = 0x1406,\r\n DEPTH_COMPONENT = 0x1902,\r\n ALPHA = 0x1906,\r\n RGB = 0x1907,\r\n RGBA = 0x1908,\r\n LUMINANCE = 0x1909,\r\n LUMINANCE_ALPHA = 0x190a,\r\n UNSIGNED_SHORT_4_4_4_4 = 0x8033,\r\n UNSIGNED_SHORT_5_5_5_1 = 0x8034,\r\n UNSIGNED_SHORT_5_6_5 = 0x8363,\r\n FRAGMENT_SHADER = 0x8b30,\r\n VERTEX_SHADER = 0x8b31,\r\n MAX_VERTEX_ATTRIBS = 0x8869,\r\n MAX_VERTEX_UNIFORM_VECTORS = 0x8dfb,\r\n MAX_VARYING_VECTORS = 0x8dfc,\r\n MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8b4d,\r\n MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8b4c,\r\n MAX_TEXTURE_IMAGE_UNITS = 0x8872,\r\n MAX_FRAGMENT_UNIFORM_VECTORS = 0x8dfd,\r\n SHADER_TYPE = 0x8b4f,\r\n DELETE_STATUS = 0x8b80,\r\n LINK_STATUS = 0x8b82,\r\n VALIDATE_STATUS = 0x8b83,\r\n ATTACHED_SHADERS = 0x8b85,\r\n ACTIVE_UNIFORMS = 0x8b86,\r\n ACTIVE_ATTRIBUTES = 0x8b89,\r\n SHADING_LANGUAGE_VERSION = 0x8b8c,\r\n CURRENT_PROGRAM = 0x8b8d,\r\n NEVER = 0x200,\r\n LESS = 0x201,\r\n EQUAL = 0x202,\r\n LEQUAL = 0x203,\r\n GREATER = 0x204,\r\n NOTEQUAL = 0x205,\r\n GEQUAL = 0x206,\r\n ALWAYS = 0x207,\r\n KEEP = 0x1e00,\r\n REPLACE = 0x1e01,\r\n INCR = 0x1e02,\r\n DECR = 0x1e03,\r\n INVERT = 0x150a,\r\n INCR_WRAP = 0x8507,\r\n DECR_WRAP = 0x8508,\r\n VENDOR = 0x1f00,\r\n RENDERER = 0x1f01,\r\n VERSION = 0x1f02,\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n NEAREST_MIPMAP_NEAREST = 0x2700,\r\n LINEAR_MIPMAP_NEAREST = 0x2701,\r\n NEAREST_MIPMAP_LINEAR = 0x2702,\r\n LINEAR_MIPMAP_LINEAR = 0x2703,\r\n TEXTURE_MAG_FILTER = 0x2800,\r\n TEXTURE_MIN_FILTER = 0x2801,\r\n TEXTURE_WRAP_S = 0x2802,\r\n TEXTURE_WRAP_T = 0x2803,\r\n TEXTURE = 0x1702,\r\n TEXTURE_CUBE_MAP = 0x8513,\r\n TEXTURE_BINDING_CUBE_MAP = 0x8514,\r\n TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,\r\n TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,\r\n TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,\r\n TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a,\r\n MAX_CUBE_MAP_TEXTURE_SIZE = 0x851c,\r\n TEXTURE0 = 0x84c0,\r\n TEXTURE1 = 0x84c1,\r\n TEXTURE2 = 0x84c2,\r\n TEXTURE3 = 0x84c3,\r\n TEXTURE4 = 0x84c4,\r\n TEXTURE5 = 0x84c5,\r\n TEXTURE6 = 0x84c6,\r\n TEXTURE7 = 0x84c7,\r\n TEXTURE8 = 0x84c8,\r\n TEXTURE9 = 0x84c9,\r\n TEXTURE10 = 0x84ca,\r\n TEXTURE11 = 0x84cb,\r\n TEXTURE12 = 0x84cc,\r\n TEXTURE13 = 0x84cd,\r\n TEXTURE14 = 0x84ce,\r\n TEXTURE15 = 0x84cf,\r\n TEXTURE16 = 0x84d0,\r\n TEXTURE17 = 0x84d1,\r\n TEXTURE18 = 0x84d2,\r\n TEXTURE19 = 0x84d3,\r\n TEXTURE20 = 0x84d4,\r\n TEXTURE21 = 0x84d5,\r\n TEXTURE22 = 0x84d6,\r\n TEXTURE23 = 0x84d7,\r\n TEXTURE24 = 0x84d8,\r\n TEXTURE25 = 0x84d9,\r\n TEXTURE26 = 0x84da,\r\n TEXTURE27 = 0x84db,\r\n TEXTURE28 = 0x84dc,\r\n TEXTURE29 = 0x84dd,\r\n TEXTURE30 = 0x84de,\r\n TEXTURE31 = 0x84df,\r\n ACTIVE_TEXTURE = 0x84e0,\r\n REPEAT = 0x2901,\r\n CLAMP_TO_EDGE = 0x812f,\r\n MIRRORED_REPEAT = 0x8370,\r\n FLOAT_VEC2 = 0x8b50,\r\n FLOAT_VEC3 = 0x8b51,\r\n FLOAT_VEC4 = 0x8b52,\r\n INT_VEC2 = 0x8b53,\r\n INT_VEC3 = 0x8b54,\r\n INT_VEC4 = 0x8b55,\r\n BOOL = 0x8b56,\r\n BOOL_VEC2 = 0x8b57,\r\n BOOL_VEC3 = 0x8b58,\r\n BOOL_VEC4 = 0x8b59,\r\n FLOAT_MAT2 = 0x8b5a,\r\n FLOAT_MAT3 = 0x8b5b,\r\n FLOAT_MAT4 = 0x8b5c,\r\n SAMPLER_2D = 0x8b5e,\r\n SAMPLER_CUBE = 0x8b60,\r\n VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,\r\n VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,\r\n VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,\r\n VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,\r\n VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886a,\r\n VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,\r\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889f,\r\n IMPLEMENTATION_COLOR_READ_TYPE = 0x8b9a,\r\n IMPLEMENTATION_COLOR_READ_FORMAT = 0x8b9b,\r\n COMPILE_STATUS = 0x8b81,\r\n LOW_FLOAT = 0x8df0,\r\n MEDIUM_FLOAT = 0x8df1,\r\n HIGH_FLOAT = 0x8df2,\r\n LOW_INT = 0x8df3,\r\n MEDIUM_INT = 0x8df4,\r\n HIGH_INT = 0x8df5,\r\n FRAMEBUFFER = 0x8d40,\r\n RENDERBUFFER = 0x8d41,\r\n RGBA4 = 0x8056,\r\n RGB5_A1 = 0x8057,\r\n RGB565 = 0x8d62,\r\n DEPTH_COMPONENT16 = 0x81a5,\r\n STENCIL_INDEX8 = 0x8d48,\r\n DEPTH_STENCIL = 0x84f9,\r\n RENDERBUFFER_WIDTH = 0x8d42,\r\n RENDERBUFFER_HEIGHT = 0x8d43,\r\n RENDERBUFFER_INTERNAL_FORMAT = 0x8d44,\r\n RENDERBUFFER_RED_SIZE = 0x8d50,\r\n RENDERBUFFER_GREEN_SIZE = 0x8d51,\r\n RENDERBUFFER_BLUE_SIZE = 0x8d52,\r\n RENDERBUFFER_ALPHA_SIZE = 0x8d53,\r\n RENDERBUFFER_DEPTH_SIZE = 0x8d54,\r\n RENDERBUFFER_STENCIL_SIZE = 0x8d55,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8cd0,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8cd1,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8cd2,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8cd3,\r\n COLOR_ATTACHMENT0 = 0x8ce0,\r\n DEPTH_ATTACHMENT = 0x8d00,\r\n STENCIL_ATTACHMENT = 0x8d20,\r\n DEPTH_STENCIL_ATTACHMENT = 0x821a,\r\n NONE = 0x0,\r\n FRAMEBUFFER_COMPLETE = 0x8cd5,\r\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8cd6,\r\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8cd7,\r\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8cd9,\r\n FRAMEBUFFER_UNSUPPORTED = 0x8cdd,\r\n FRAMEBUFFER_BINDING = 0x8ca6,\r\n RENDERBUFFER_BINDING = 0x8ca7,\r\n MAX_RENDERBUFFER_SIZE = 0x84e8,\r\n INVALID_FRAMEBUFFER_OPERATION = 0x506,\r\n UNPACK_FLIP_Y_WEBGL = 0x9240,\r\n UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,\r\n CONTEXT_LOST_WEBGL = 0x9242,\r\n UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,\r\n BROWSER_DEFAULT_WEBGL = 0x9244,\r\n TEXTURE_MAX_ANISOTROPY = 0x84fe,\r\n MAX_TEXTURE_MAX_ANISOTROPY = 0x84ff\r\n}\r\n","/**\r\n * Utilitty functions and classes\r\n */\r\n\r\nimport { WebGLEnum } from './webgl_enum';\r\n\r\nexport function isWebGL2(gl: WebGLRenderingContext | WebGL2RenderingContext): gl is WebGL2RenderingContext {\r\n return !!(gl && (gl as any).texStorage2D);\r\n}\r\n\r\nexport class WebGLError extends Error {\r\n private static readonly errorToString: Record<number, string> = {\r\n [WebGLEnum.NO_ERROR]: 'NO_ERROR',\r\n [WebGLEnum.INVALID_ENUM]: 'INVALID_ENUM',\r\n [WebGLEnum.INVALID_VALUE]: 'INVALID_VALUE',\r\n [WebGLEnum.INVALID_OPERATION]: 'INVALID_OPERATION',\r\n [WebGLEnum.INVALID_FRAMEBUFFER_OPERATION]: 'INVALID_FRAMEBUFFER_OPERATION',\r\n [WebGLEnum.OUT_OF_MEMORY]: 'OUT_OF_MEMORY',\r\n [WebGLEnum.CONTEXT_LOST_WEBGL]: 'CONTEXT_LOST_WEBGL'\r\n };\r\n code: number;\r\n constructor(code: number) {\r\n super(WebGLError.errorToString[code]);\r\n this.code = code;\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport { CubeFace } from '@zephyr3d/base';\r\nimport type {\r\n TextureType,\r\n CompareFunc,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n PrimitiveType,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n FaceWinding,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport { PBPrimitiveType } from '@zephyr3d/device';\r\nimport { WebGLEnum } from './webgl_enum';\r\n\r\nexport const blendEquationMap: Record<BlendEquation, number> = {\r\n add: WebGLEnum.FUNC_ADD,\r\n subtract: WebGLEnum.FUNC_SUBTRACT,\r\n 'reverse-subtract': WebGLEnum.FUNC_REVERSE_SUBTRACT,\r\n max: WebGLEnum.FUNC_MAX,\r\n min: WebGLEnum.FUNC_MIN\r\n};\r\n\r\nexport const blendEquationInvMap: Record<number, BlendEquation> = {\r\n [WebGLEnum.FUNC_ADD]: 'add',\r\n [WebGLEnum.FUNC_SUBTRACT]: 'subtract',\r\n [WebGLEnum.FUNC_REVERSE_SUBTRACT]: 'reverse-subtract',\r\n [WebGLEnum.FUNC_MAX]: 'max',\r\n [WebGLEnum.FUNC_MIN]: 'min'\r\n};\r\n\r\nexport const blendFuncMap: Record<BlendFunc, number> = {\r\n zero: WebGLEnum.ZERO,\r\n one: WebGLEnum.ONE,\r\n 'src-alpha': WebGLEnum.SRC_ALPHA,\r\n 'inv-src-alpha': WebGLEnum.ONE_MINUS_SRC_ALPHA,\r\n 'src-alpha-saturate': WebGLEnum.BLEND,\r\n 'dst-alpha': WebGLEnum.DST_ALPHA,\r\n 'inv-dst-alpha': WebGLEnum.ONE_MINUS_DST_ALPHA,\r\n 'src-color': WebGLEnum.SRC_COLOR,\r\n 'inv-src-color': WebGLEnum.ONE_MINUS_SRC_COLOR,\r\n 'dst-color': WebGLEnum.DST_COLOR,\r\n 'inv-dst-color': WebGLEnum.ONE_MINUS_DST_COLOR,\r\n 'const-color': WebGLEnum.CONSTANT_COLOR,\r\n 'inv-const-color': WebGLEnum.ONE_MINUS_CONSTANT_COLOR,\r\n 'const-alpha': WebGLEnum.CONSTANT_ALPHA,\r\n 'inv-const-alpha': WebGLEnum.ONE_MINUS_CONSTANT_ALPHA\r\n};\r\n\r\nexport const blendFuncInvMap: Record<number, BlendFunc> = {\r\n [WebGLEnum.ZERO]: 'zero',\r\n [WebGLEnum.ONE]: 'one',\r\n [WebGLEnum.SRC_ALPHA]: 'src-alpha',\r\n [WebGLEnum.ONE_MINUS_SRC_ALPHA]: 'inv-src-alpha',\r\n [WebGLEnum.SRC_ALPHA_SATURATE]: 'src-alpha-saturate',\r\n [WebGLEnum.DST_ALPHA]: 'dst-alpha',\r\n [WebGLEnum.ONE_MINUS_DST_ALPHA]: 'inv-dst-alpha',\r\n [WebGLEnum.SRC_COLOR]: 'src-color',\r\n [WebGLEnum.ONE_MINUS_SRC_COLOR]: 'inv-src-color',\r\n [WebGLEnum.DST_COLOR]: 'dst-color',\r\n [WebGLEnum.ONE_MINUS_DST_COLOR]: 'inv-dst-color',\r\n [WebGLEnum.CONSTANT_COLOR]: 'const-color',\r\n [WebGLEnum.ONE_MINUS_CONSTANT_COLOR]: 'inv-const-color',\r\n [WebGLEnum.CONSTANT_ALPHA]: 'const-alpha',\r\n [WebGLEnum.ONE_MINUS_CONSTANT_ALPHA]: 'inv-const-alpha'\r\n};\r\n\r\nexport const faceModeMap: Record<FaceMode, number> = {\r\n none: WebGLEnum.NONE,\r\n front: WebGLEnum.FRONT,\r\n back: WebGLEnum.BACK\r\n};\r\n\r\nexport const faceModeInvMap: Record<number, FaceMode> = {\r\n [WebGLEnum.NONE]: 'none',\r\n [WebGLEnum.FRONT]: 'front',\r\n [WebGLEnum.BACK]: 'back'\r\n};\r\n\r\nexport const faceWindingMap: Record<FaceWinding, number> = {\r\n cw: WebGLEnum.CW,\r\n ccw: WebGLEnum.CCW\r\n};\r\n\r\nexport const faceWindingInvMap: Record<number, FaceWinding> = {\r\n [WebGLEnum.CW]: 'cw',\r\n [WebGLEnum.CCW]: 'ccw'\r\n};\r\n\r\nexport const stencilOpMap: Record<StencilOp, number> = {\r\n keep: WebGLEnum.KEEP,\r\n zero: WebGLEnum.ZERO,\r\n replace: WebGLEnum.REPLACE,\r\n incr: WebGLEnum.INCR,\r\n 'incr-wrap': WebGLEnum.INCR_WRAP,\r\n decr: WebGLEnum.DECR,\r\n 'decr-wrap': WebGLEnum.DECR_WRAP,\r\n invert: WebGLEnum.INVERT\r\n};\r\n\r\nexport const stencilOpInvMap: Record<number, StencilOp> = {\r\n [WebGLEnum.KEEP]: 'keep',\r\n [WebGLEnum.ZERO]: 'zero',\r\n [WebGLEnum.REPLACE]: 'replace',\r\n [WebGLEnum.INCR]: 'incr',\r\n [WebGLEnum.INCR_WRAP]: 'incr-wrap',\r\n [WebGLEnum.DECR]: 'decr',\r\n [WebGLEnum.DECR_WRAP]: 'decr-wrap',\r\n [WebGLEnum.INVERT]: 'invert'\r\n};\r\n\r\nexport const compareFuncMap: Record<CompareFunc, number> = {\r\n always: WebGLEnum.ALWAYS,\r\n le: WebGLEnum.LEQUAL,\r\n ge: WebGLEnum.GEQUAL,\r\n lt: WebGLEnum.LESS,\r\n gt: WebGLEnum.GREATER,\r\n eq: WebGLEnum.EQUAL,\r\n ne: WebGLEnum.NOTEQUAL,\r\n never: WebGLEnum.NEVER\r\n};\r\n\r\nexport const compareFuncInvMap: Record<number, Nullable<CompareFunc>> = {\r\n [WebGLEnum.NONE]: null,\r\n [WebGLEnum.ALWAYS]: 'always',\r\n [WebGLEnum.LEQUAL]: 'le',\r\n [WebGLEnum.GEQUAL]: 'ge',\r\n [WebGLEnum.LESS]: 'lt',\r\n [WebGLEnum.GREATER]: 'gt',\r\n [WebGLEnum.EQUAL]: 'eq',\r\n [WebGLEnum.NOTEQUAL]: 'ne',\r\n [WebGLEnum.NEVER]: 'never'\r\n};\r\n\r\nexport const textureWrappingMap: Record<TextureAddressMode, number> = {\r\n repeat: WebGLEnum.REPEAT,\r\n 'mirrored-repeat': WebGLEnum.MIRRORED_REPEAT,\r\n clamp: WebGLEnum.CLAMP_TO_EDGE\r\n};\r\n\r\nexport const typeMap = {\r\n [PBPrimitiveType.BOOL]: WebGLEnum.BOOL,\r\n [PBPrimitiveType.BVEC2]: WebGLEnum.BOOL_VEC2,\r\n [PBPrimitiveType.BVEC3]: WebGLEnum.BOOL_VEC3,\r\n [PBPrimitiveType.BVEC4]: WebGLEnum.BOOL_VEC4,\r\n [PBPrimitiveType.F32]: WebGLEnum.FLOAT,\r\n [PBPrimitiveType.F32VEC2]: WebGLEnum.FLOAT_VEC2,\r\n [PBPrimitiveType.F32VEC3]: WebGLEnum.FLOAT_VEC3,\r\n [PBPrimitiveType.F32VEC4]: WebGLEnum.FLOAT_VEC4,\r\n [PBPrimitiveType.I8]: WebGLEnum.BYTE,\r\n [PBPrimitiveType.I16]: WebGLEnum.SHORT,\r\n [PBPrimitiveType.I32]: WebGLEnum.INT,\r\n [PBPrimitiveType.I32VEC2]: WebGLEnum.INT_VEC2,\r\n [PBPrimitiveType.I32VEC3]: WebGLEnum.INT_VEC3,\r\n [PBPrimitiveType.I32VEC4]: WebGLEnum.INT_VEC4,\r\n [PBPrimitiveType.U8]: WebGLEnum.UNSIGNED_BYTE,\r\n [PBPrimitiveType.U8_NORM]: WebGLEnum.UNSIGNED_BYTE,\r\n [PBPrimitiveType.I8_NORM]: WebGLEnum.BYTE,\r\n [PBPrimitiveType.U16]: WebGLEnum.UNSIGNED_SHORT,\r\n [PBPrimitiveType.U16_NORM]: WebGLEnum.UNSIGNED_SHORT,\r\n [PBPrimitiveType.I16_NORM]: WebGLEnum.SHORT,\r\n [PBPrimitiveType.U32]: WebGLEnum.UNSIGNED_INT,\r\n [PBPrimitiveType.U32VEC2]: WebGLEnum.UNSIGNED_INT_VEC2,\r\n [PBPrimitiveType.U32VEC3]: WebGLEnum.UNSIGNED_INT_VEC3,\r\n [PBPrimitiveType.U32VEC4]: WebGLEnum.UNSIGNED_INT_VEC4\r\n};\r\n\r\nexport const primitiveTypeMap: Record<PrimitiveType, number> = {\r\n 'triangle-list': WebGLEnum.TRIANGLES,\r\n 'triangle-strip': WebGLEnum.TRIANGLE_STRIP,\r\n 'triangle-fan': WebGLEnum.TRIANGLE_FAN,\r\n 'line-list': WebGLEnum.LINES,\r\n 'line-strip': WebGLEnum.LINE_STRIP,\r\n 'point-list': WebGLEnum.POINTS\r\n};\r\n\r\nexport const textureTargetMap: Record<TextureType, number> = {\r\n '2d': WebGLEnum.TEXTURE_2D,\r\n '3d': WebGLEnum.TEXTURE_3D,\r\n cube: WebGLEnum.TEXTURE_CUBE_MAP,\r\n '2darray': WebGLEnum.TEXTURE_2D_ARRAY\r\n};\r\n\r\nexport const cubeMapFaceMap = {\r\n [CubeFace.PX]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_X,\r\n [CubeFace.NX]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_X,\r\n [CubeFace.PY]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_Y,\r\n [CubeFace.NY]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_Y,\r\n [CubeFace.PZ]: WebGLEnum.TEXTURE_CUBE_MAP_POSITIVE_Z,\r\n [CubeFace.NZ]: WebGLEnum.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n};\r\n\r\nexport function textureMagFilterToWebGL(magFilter: TextureFilterMode) {\r\n switch (magFilter) {\r\n case 'nearest':\r\n return WebGLEnum.NEAREST;\r\n case 'linear':\r\n return WebGLEnum.LINEAR;\r\n default:\r\n return WebGLEnum.NONE;\r\n }\r\n}\r\n\r\nexport function textureMinFilterToWebGL(minFilter: TextureFilterMode, mipFilter: TextureFilterMode) {\r\n switch (minFilter) {\r\n case 'nearest':\r\n switch (mipFilter) {\r\n case 'none':\r\n return WebGLEnum.NEAREST;\r\n case 'nearest':\r\n return WebGLEnum.NEAREST_MIPMAP_NEAREST;\r\n case 'linear':\r\n return WebGLEnum.NEAREST_MIPMAP_LINEAR;\r\n }\r\n break;\r\n case 'linear':\r\n switch (mipFilter) {\r\n case 'none':\r\n return WebGLEnum.LINEAR;\r\n case 'nearest':\r\n return WebGLEnum.LINEAR_MIPMAP_NEAREST;\r\n case 'linear':\r\n return WebGLEnum.LINEAR_MIPMAP_LINEAR;\r\n }\r\n break;\r\n }\r\n return WebGLEnum.NONE;\r\n}\r\n","import type {\r\n BindGroup,\r\n VertexLayout,\r\n TextureSampler,\r\n BaseTexture,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCube,\r\n TextureVideo,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n GPUObject,\r\n AbstractDevice\r\n} from '@zephyr3d/device';\r\nimport { genDefaultName } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { Disposable, type Nullable } from '@zephyr3d/base';\r\n\r\nlet _uniqueId = 0;\r\n\r\nexport abstract class WebGLGPUObject<T> extends Disposable implements GPUObject<T> {\r\n protected _device: WebGLDevice;\r\n protected _object: Nullable<T>;\r\n protected _uid: number;\r\n protected _cid: number;\r\n protected _name: string;\r\n protected _restoreHandler: Nullable<(obj: GPUObject) => void>;\r\n constructor(device: WebGLDevice) {\r\n super();\r\n this._device = device;\r\n this._object = null;\r\n this._uid = ++_uniqueId;\r\n this._cid = 1;\r\n this._name = genDefaultName(this);\r\n this._restoreHandler = null;\r\n this._device.addGPUObject(this);\r\n }\r\n get device(): AbstractDevice {\r\n return this._device;\r\n }\r\n get object() {\r\n return this._object;\r\n }\r\n get restoreHandler() {\r\n return this._restoreHandler;\r\n }\r\n set restoreHandler(handler: Nullable<(obj: GPUObject) => void>) {\r\n this._restoreHandler = handler;\r\n }\r\n get uid() {\r\n return this._uid;\r\n }\r\n get cid() {\r\n return this._cid;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n if (val !== this._name) {\r\n const lastName = this._name;\r\n this._name = val;\r\n this._device.dispatchEvent('gpuobject_rename', this, lastName);\r\n }\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return false;\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return false;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return false;\r\n }\r\n isTexture(): this is BaseTexture {\r\n return false;\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return false;\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return false;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return false;\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return false;\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return false;\r\n }\r\n isProgram(): this is GPUProgram {\r\n return false;\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return false;\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return false;\r\n }\r\n reload() {\r\n if (this.disposed) {\r\n this._device.restoreObject(this);\r\n this._cid++;\r\n }\r\n }\r\n destroy() {\r\n throw new Error('Abstract function call: destroy()');\r\n }\r\n restore() {\r\n throw new Error('Abstract function call: restore()');\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._device.disposeObject(this, true);\r\n }\r\n}\r\n","import type { Immutable, Nullable, RequireOptionals, TypedArray } from '@zephyr3d/base';\r\nimport { isPowerOf2 } from '@zephyr3d/base';\r\nimport type {\r\n SamplerOptions,\r\n BaseTexture,\r\n TextureType,\r\n TextureFormat,\r\n GPUDataBuffer,\r\n FrameBuffer\r\n} from '@zephyr3d/device';\r\nimport {\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n isFloatTextureFormat,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n GPUResourceUsageFlags,\r\n isSRGBTextureFormat,\r\n getTextureFormatBlockWidth,\r\n getTextureFormatBlockHeight,\r\n getTextureFormatBlockSize\r\n} from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { cubeMapFaceMap, textureTargetMap } from './constants_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { WebGLTextureCaps, TextureFormatInfoWebGL } from './capabilities_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport abstract class WebGLBaseTexture extends WebGLGPUObject<WebGLTexture> {\r\n protected _target: TextureType;\r\n protected _memCost: number;\r\n protected _flags: number;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _depth: number;\r\n protected _format: Nullable<TextureFormat>;\r\n protected _mipLevelCount: number;\r\n protected _samplerOptions: Nullable<RequireOptionals<SamplerOptions>>;\r\n protected _webgl1fallback: boolean;\r\n protected _readFrameBuffers: FrameBuffer[][];\r\n constructor(device: WebGLDevice, target?: TextureType) {\r\n super(device);\r\n this._target = target || '2d';\r\n this._memCost = 0;\r\n this._flags = 0;\r\n this._width = 0;\r\n this._height = 0;\r\n this._depth = 1;\r\n this._format = null;\r\n this._mipLevelCount = 0;\r\n this._samplerOptions = null;\r\n this._webgl1fallback = false;\r\n this._readFrameBuffers = [];\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n get memCost() {\r\n return this._memCost;\r\n }\r\n get format() {\r\n return this._format!;\r\n }\r\n get mipLevelCount() {\r\n return this._mipLevelCount;\r\n }\r\n get samplerOptions(): Nullable<Immutable<SamplerOptions>> {\r\n return this._samplerOptions;\r\n }\r\n set samplerOptions(options: Nullable<Immutable<SamplerOptions>>) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n this._samplerOptions = options\r\n ? Object.assign({}, this._getSamplerOptions(params, !!options.compare), options)\r\n : null;\r\n } else {\r\n console.log('Set sampler options failed: Texture not initialized');\r\n }\r\n }\r\n get isWebGL1Fallback() {\r\n return this._webgl1fallback;\r\n }\r\n isFilterable() {\r\n if (!this._format || !this.getTextureCaps().getTextureFormatInfo(this._format)?.filterable) {\r\n return false;\r\n }\r\n if (!(this.device as WebGLDevice).isWebGL2 && !isPowerOf2(this._width) && !isPowerOf2(this._height)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteTexture(this._object);\r\n this._device.invalidateBindingTextures();\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n for (const x of this._readFrameBuffers) {\r\n if (x) {\r\n for (const fb of x) {\r\n if (fb) {\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n }\r\n this._readFrameBuffers = [];\r\n this._memCost = 0;\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.init();\r\n }\r\n }\r\n isTexture(): this is BaseTexture {\r\n return true;\r\n }\r\n getTextureCaps() {\r\n return this._device.getDeviceCaps().textureCaps;\r\n }\r\n isSRGBFormat() {\r\n return !!this._format && isSRGBTextureFormat(this._format);\r\n }\r\n isFloatFormat() {\r\n return !!this._format && isFloatTextureFormat(this._format);\r\n }\r\n isIntegerFormat() {\r\n return !!this._format && isIntegerTextureFormat(this._format);\r\n }\r\n isSignedFormat() {\r\n return !!this._format && isSignedTextureFormat(this._format);\r\n }\r\n isCompressedFormat() {\r\n return !!this._format && isCompressedTextureFormat(this._format);\r\n }\r\n isDepth() {\r\n return !!this._format && hasDepthChannel(this._format);\r\n }\r\n getDefaultSampler(shadow: boolean) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n return this._device.createSampler(\r\n !this._samplerOptions || !this._samplerOptions.compare !== !shadow\r\n ? this._getSamplerOptions(params, shadow)\r\n : this._samplerOptions\r\n );\r\n } else {\r\n throw new Error('Get default sampler failed: texture not initialized');\r\n }\r\n }\r\n protected _getFramebufferForRead(faceOrLevel: number, mipLevel: number) {\r\n let faceFramebuffers = this._readFrameBuffers[faceOrLevel];\r\n if (!faceFramebuffers) {\r\n faceFramebuffers = [];\r\n this._readFrameBuffers[faceOrLevel] = faceFramebuffers;\r\n }\r\n let framebuffer = faceFramebuffers[mipLevel];\r\n if (!framebuffer) {\r\n framebuffer = this._device.createFrameBuffer([this], null);\r\n if (this.isTextureCube()) {\r\n framebuffer.setColorAttachmentCubeFace(0, faceOrLevel);\r\n } else if (this.isTexture2DArray() || this.isTexture3D()) {\r\n framebuffer.setColorAttachmentLayer(0, faceOrLevel);\r\n }\r\n framebuffer.setColorAttachmentMipLevel(0, mipLevel);\r\n framebuffer.setColorAttachmentGenerateMipmaps(0, false);\r\n faceFramebuffers[mipLevel] = framebuffer;\r\n }\r\n return framebuffer;\r\n }\r\n abstract generateMipmaps(): void;\r\n abstract init(): void;\r\n abstract readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n /** @internal */\r\n protected allocInternal(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n if (!this._device.isWebGL2 && (!isPowerOf2(width) || !isPowerOf2(height))) {\r\n numMipLevels = 1;\r\n this._webgl1fallback = true;\r\n } else {\r\n this._webgl1fallback = false;\r\n }\r\n this._device.setCurrentSamplerForTexture(this, null);\r\n if (numMipLevels === 0) {\r\n numMipLevels = this._calcMipLevelCount(format, width, height, depth);\r\n } else if (numMipLevels !== 1) {\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n const autoMipLevelCount = Math.floor(Math.log2(size)) + 1; //this._calcMipLevelCount(format, width, height, depth);\r\n if (!Number.isInteger(numMipLevels) || numMipLevels < 0 || numMipLevels > autoMipLevelCount) {\r\n numMipLevels = autoMipLevelCount;\r\n }\r\n }\r\n if (\r\n this._object &&\r\n (this._format !== format || this._width !== width || this._height !== height || this._depth !== depth,\r\n this._mipLevelCount !== numMipLevels)\r\n ) {\r\n const obj = this._object;\r\n this._device.runNextFrame(() => {\r\n this._device.context.deleteTexture(obj);\r\n this._device.invalidateBindingTextures();\r\n });\r\n this._object = null;\r\n }\r\n if (!this._object) {\r\n this._format = format;\r\n this._width = width;\r\n this._height = height;\r\n this._depth = depth;\r\n this._mipLevelCount = numMipLevels;\r\n if (!this._device.isContextLost()) {\r\n this._object = this._device.context.createTexture();\r\n const gl = this._device.context;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n if (isWebGL2(gl) && !this.isTextureVideo()) {\r\n if (!this.isTexture3D() && !this.isTexture2DArray()) {\r\n gl.texStorage2D(\r\n textureTargetMap[this._target],\r\n this._mipLevelCount,\r\n params.glInternalFormat,\r\n this._width,\r\n this._height\r\n );\r\n } else {\r\n gl.texStorage3D(\r\n textureTargetMap[this._target],\r\n this._mipLevelCount,\r\n params.glInternalFormat,\r\n this._width,\r\n this._height,\r\n this._depth\r\n );\r\n }\r\n this._device.context.texParameteri(textureTargetMap[this._target], WebGLEnum.TEXTURE_BASE_LEVEL, 0);\r\n this._device.context.texParameteri(\r\n textureTargetMap[this._target],\r\n WebGLEnum.TEXTURE_MAX_LEVEL,\r\n this._mipLevelCount - 1\r\n );\r\n } else {\r\n let w = this._width;\r\n let h = this._height;\r\n const isCompressed = isCompressedTextureFormat(this._format);\r\n const blockWidth = getTextureFormatBlockWidth(this._format);\r\n const blockHeight = getTextureFormatBlockHeight(this._format);\r\n const blockSize = getTextureFormatBlockSize(this._format);\r\n for (let mip = 0; mip < numMipLevels; mip++) {\r\n const data = isCompressed\r\n ? new Uint8Array(Math.ceil(w / blockWidth) * Math.ceil(h / blockHeight) * blockSize)\r\n : null;\r\n data?.fill(0xff);\r\n if (this.isTextureCube()) {\r\n for (let face = 0; face < 6; face++) {\r\n const faceTarget = cubeMapFaceMap[face as keyof typeof cubeMapFaceMap];\r\n if (isCompressed) {\r\n this._device.context.compressedTexImage2D(\r\n faceTarget,\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n data!\r\n );\r\n } else {\r\n this._device.context.texImage2D(\r\n faceTarget,\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n null\r\n );\r\n }\r\n }\r\n } else {\r\n if (isCompressed) {\r\n this._device.context.compressedTexImage2D(\r\n textureTargetMap[this._target],\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n data!\r\n );\r\n } else {\r\n this._device.context.texImage2D(\r\n textureTargetMap[this._target],\r\n mip,\r\n params.glInternalFormat,\r\n w,\r\n h,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n null\r\n );\r\n }\r\n }\r\n w = Math.max(w >> 1, 1);\r\n h = Math.max(h >> 1, 1);\r\n }\r\n }\r\n const k = this.isTextureCube() ? 6 : 1;\r\n const memCost = (this.getTextureCaps() as WebGLTextureCaps).calcMemoryUsage(\r\n this._format,\r\n params.glType[0],\r\n this._width * this._height * this._depth * k\r\n );\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _calcMipLevelCount(format: TextureFormat, width: number, height: number, depth: number) {\r\n if (hasDepthChannel(format) || this.isTextureVideo()) {\r\n return 1;\r\n }\r\n if (this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP) {\r\n return 1;\r\n }\r\n if (!this._device.isWebGL2 && (!isPowerOf2(width) || !isPowerOf2(height))) {\r\n return 1;\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(format);\r\n if (!params || !params.renderable) {\r\n return 1;\r\n }\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n return Math.floor(Math.log2(size)) + 1;\r\n }\r\n /** @internal */\r\n protected _getSamplerOptions(params: Immutable<TextureFormatInfoWebGL>, shadow: boolean) {\r\n const comparison = this.isDepth() && shadow;\r\n const filterable = params.filterable || comparison;\r\n const magFilter = filterable ? 'linear' : 'nearest';\r\n const minFilter = filterable ? 'linear' : 'nearest';\r\n const mipFilter = this._mipLevelCount > 1 ? (filterable ? 'linear' : 'nearest') : 'none';\r\n return {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter,\r\n lodMin: 0,\r\n lodMax: 32,\r\n maxAnisotropy: 1,\r\n compare: comparison ? 'lt' : null\r\n } as const;\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n TextureMipmapData,\r\n Texture2D,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture2D extends WebGLBaseTexture implements Texture2D<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n super(device, '2d');\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n width,\r\n height,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLevel: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (faceOrLevel !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter 'faceOrLayer' must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(0, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLevel: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (faceOrLevel !== 0) {\r\n throw new Error(`Texture2D.readPixelsToBuffer(): parameter 'faceOrLayer' must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n }\r\n loadFromElement(element: TextureImageElement, sRGB: boolean, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n const format = sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n this.loadImage(element, format);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (data.isCubemap || data.isVolume) {\r\n console.error('loading 2d texture with mipmap data failed: data is not 2d texture');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, width: number, height: number, numMipLevels: number) {\r\n this.allocInternal(format, width, height, 1, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n let format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n let swizzle = false;\r\n if (format === 'bgra8unorm') {\r\n format = 'rgba8unorm';\r\n swizzle = true;\r\n } else if (format === 'bgra8unorm-srgb') {\r\n format = 'rgba8unorm-srgb';\r\n swizzle = true;\r\n }\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.warn('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let i = 0; i < this._mipLevelCount; i++) {\r\n if (levels.isCompressed) {\r\n this._device.context.compressedTexSubImage2D(\r\n target,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n params.glInternalFormat,\r\n levels.mipDatas[0][i].data\r\n );\r\n } else {\r\n if (swizzle) {\r\n // convert bgra to rgba\r\n for (let j = 0; j < levels.mipDatas[0][i].width * levels.mipDatas[0][i].height; j++) {\r\n const t = levels.mipDatas[0][i].data[j * 4];\r\n levels.mipDatas[0][i].data[j * 4] = levels.mipDatas[0][i].data[j * 4 + 2];\r\n levels.mipDatas[0][i].data[j * 4 + 2] = t;\r\n }\r\n }\r\n this._device.context.texSubImage2D(\r\n target,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[0][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadImage(element: TextureImageElement, format: TextureFormat) {\r\n this.allocInternal(format, Number(element.width), Number(element.height), 1, 0);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n (this.device as WebGLDevice).clearErrors();\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 4);\r\n this._device.context.texSubImage2D(target, 0, 0, 0, params.glFormat, params.glType[0], element);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n Texture2DArray,\r\n GPUDataBuffer,\r\n TextureFormat,\r\n TextureMipmapData\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture2DArray extends WebGLBaseTexture implements Texture2DArray<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n if (!device.isWebGL2) {\r\n throw new Error('device does not support 2d texture array');\r\n }\r\n super(device, '2darray');\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n zOffset,\r\n width,\r\n height,\r\n depth,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, 1)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let layer = 0; layer < levels.arraySize; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n if (levels.isCompressed) {\r\n gl.compressedTexSubImage3D(\r\n gl.TEXTURE_2D_ARRAY,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glInternalFormat,\r\n levels.mipDatas[layer][i].data\r\n );\r\n } else {\r\n gl.texSubImage3D(\r\n gl.TEXTURE_2D_ARRAY,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[layer][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n layerIndex: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n layerIndex,\r\n width,\r\n height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n layerIndex,\r\n width,\r\n height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(layer, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentLayer(0, layer);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { Texture3D, GPUDataBuffer, TextureFormat, TextureMipmapData } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTexture3D extends WebGLBaseTexture implements Texture3D<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n if (!device.isWebGL2) {\r\n throw new Error('device does not support 3D texture');\r\n }\r\n super(device, '3d');\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n gl.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n gl.texSubImage3D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n zOffset,\r\n width,\r\n height,\r\n depth,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixels(): parameter mipLevel must be 0`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(layer, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixelsToBuffer(): parameter mipLevel must be 0`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentLayer(0, layer);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.depth;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //gl.bindTexture(textureTargetMap[this._target], this._object);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let layer = 0; layer < depth; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n if (levels.isCompressed) {\r\n gl.compressedTexSubImage3D(\r\n gl.TEXTURE_3D,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glInternalFormat,\r\n levels.mipDatas[layer][i].data\r\n );\r\n } else {\r\n gl.texSubImage3D(\r\n gl.TEXTURE_3D,\r\n i,\r\n 0,\r\n 0,\r\n layer,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[layer][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { CubeFace, TypedArray } from '@zephyr3d/base';\r\nimport type {\r\n TextureMipmapData,\r\n TextureCube,\r\n TextureImageElement,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport { textureTargetMap, cubeMapFaceMap } from './constants_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\n\r\nexport class WebGLTextureCube extends WebGLBaseTexture implements TextureCube<WebGLTexture> {\r\n constructor(device: WebGLDevice) {\r\n super(device, 'cube');\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number, face: CubeFace) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n width,\r\n height,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n face: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n if (x === 0 && y === 0 && width === data.width && height === data.height) {\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face as keyof typeof cubeMapFaceMap],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n data\r\n );\r\n } else {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, x, y, width, height, 0, 0, width, height);\r\n this._device.context.texSubImage2D(\r\n textureTargetMap[this._target],\r\n 0,\r\n xOffset,\r\n yOffset,\r\n params.glFormat,\r\n params.glType[0],\r\n cvs\r\n );\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n createEmpty(format: TextureFormat, size: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadEmpty(format, size, 0);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n if (!this.device.isContextLost() && !this.disposed) {\r\n const fb = this._getFramebufferForRead(face, mipLevel);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n const result = this._device.readPixels(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n return result;\r\n }\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const fb = this._device.createFrameBuffer([this], null);\r\n fb.setColorAttachmentCubeFace(0, face);\r\n fb.setColorAttachmentMipLevel(0, mipLevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n this._device.pushDeviceStates();\r\n this._device.setFramebuffer(fb);\r\n this._device.readPixelsToBuffer(0, x, y, w, h, buffer);\r\n this._device.popDeviceStates();\r\n fb.dispose();\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return true;\r\n }\r\n generateMipmaps() {\r\n if (this._object && this._mipLevelCount > 1) {\r\n const target = textureTargetMap[this._target];\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.generateMipmap(target);\r\n }\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (!data.isCubemap) {\r\n console.error('loading cubmap with mipmap data failed: data is not cubemap');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error('webgl device does not support storage texture');\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, size: number, mipLevelCount: number) {\r\n this.allocInternal(format, size, size, 1, mipLevelCount);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /*\r\n private loadImages(images: HTMLImageElement[], format: TextureFormat): void {\r\n const width = images[0].width;\r\n const height = images[0].height;\r\n if (images.length !== 6) {\r\n console.error(new Error('cubemap face list must have 6 images'));\r\n return;\r\n }\r\n for (let i = 1; i < 6; i++) {\r\n if (images[i].width !== width || images[i].height !== height) {\r\n console.error(new Error('cubemap face images must have identical sizes'));\r\n return;\r\n }\r\n }\r\n if (width === 0 || height === 0) {\r\n return;\r\n }\r\n this.allocInternal(format, width, height, 1, 0);\r\n if (!this._device.isContextLost()) {\r\n (this.device as WebGLDevice).clearErrors();\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n //this._device.context.bindTexture(textureTargetMap[this._target], this._object);\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format);\r\n for (let face = 0; face < 6; face++) {\r\n this._device.context.texSubImage2D(\r\n cubeMapFaceMap[face],\r\n 0,\r\n 0,\r\n 0,\r\n params.glFormat,\r\n params.glType[0],\r\n images[face]\r\n );\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n const format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.warn('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(textureTargetMap[this._target], 0, this);\r\n (this.device as WebGLDevice).clearErrors();\r\n for (let face = 0; face < 6; face++) {\r\n const faceTarget = cubeMapFaceMap[face as keyof typeof cubeMapFaceMap];\r\n if (this._mipLevelCount > 1 && levels.mipDatas[face].length !== this._mipLevelCount) {\r\n console.error(`invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < this._mipLevelCount; i++) {\r\n if (levels.isCompressed) {\r\n this._device.context.compressedTexSubImage2D(\r\n faceTarget,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n params.glInternalFormat,\r\n levels.mipDatas[face][i].data\r\n );\r\n } else {\r\n this._device.context.texSubImage2D(\r\n faceTarget,\r\n i,\r\n 0,\r\n 0,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n params.glFormat,\r\n params.glType[0],\r\n levels.mipDatas[face][i].data\r\n );\r\n }\r\n const err = (this.device as WebGLDevice).getError();\r\n if (err) {\r\n console.error(err);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import type { GPUDataBuffer, TextureVideo } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { textureTargetMap } from './constants_webgl';\r\nimport { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\n\r\nexport class WebGLTextureVideo extends WebGLBaseTexture implements TextureVideo<WebGLTexture> {\r\n private _source!: HTMLVideoElement;\r\n private _callbackId: Nullable<number>;\r\n constructor(device: WebGLDevice, source: HTMLVideoElement) {\r\n super(device, '2d');\r\n this._callbackId = null;\r\n this._format = null;\r\n this.loadFromElement(source);\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return true;\r\n }\r\n get source() {\r\n return this._source;\r\n }\r\n destroy() {\r\n if (this._source && this._callbackId !== null) {\r\n this._source.cancelVideoFrameCallback(this._callbackId);\r\n }\r\n super.destroy();\r\n }\r\n init() {\r\n this.loadElement(this._source);\r\n }\r\n /** @internal */\r\n loadFromElement(el: HTMLVideoElement) {\r\n this._flags = GPUResourceUsageFlags.TF_NO_MIPMAP;\r\n this.loadElement(el);\r\n }\r\n generateMipmaps() {\r\n // Does nothing\r\n }\r\n async readPixels(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: TypedArray\r\n ) {\r\n throw new Error(`Video texture does not support readPixels()`);\r\n }\r\n readPixelsToBuffer(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: GPUDataBuffer<unknown>\r\n ) {\r\n throw new Error(`Video texture does not support readPixelsToBuffer()`);\r\n }\r\n /** @internal */\r\n updateVideoFrame() {\r\n if (this.object && this._source.currentTime > 0 && !this._source.requestVideoFrameCallback) {\r\n this.update();\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private update() {\r\n this.allocInternal('rgba8unorm', this._source.videoWidth, this._source.videoHeight, 1, 1);\r\n if (!this._device.isContextLost()) {\r\n const target = textureTargetMap[this._target];\r\n const params = (this.getTextureCaps() as WebGLTextureCaps).getTextureFormatInfo(this._format!);\r\n this._device.bindTexture(target, 0, this);\r\n //this._device.context.bindTexture(target, this._object);\r\n this._device.context.pixelStorei(this._device.context.UNPACK_ALIGNMENT, 1);\r\n this._device.context.texImage2D(\r\n target,\r\n 0,\r\n params.glInternalFormat,\r\n params.glFormat,\r\n params.glType[0],\r\n this._source\r\n );\r\n }\r\n }\r\n /** @internal */\r\n private loadElement(element: HTMLVideoElement) {\r\n if (this._source && this._callbackId !== null) {\r\n this._source.cancelVideoFrameCallback(this._callbackId);\r\n this._callbackId = null;\r\n }\r\n this._source = element;\r\n if (this._source?.requestVideoFrameCallback) {\r\n const that = this;\r\n that._callbackId = this._source.requestVideoFrameCallback(function cb() {\r\n if (that._object) {\r\n that.update();\r\n that._callbackId = that._source.requestVideoFrameCallback(cb);\r\n }\r\n });\r\n }\r\n this.allocInternal(\r\n 'rgba8unorm',\r\n Math.max(this._source.videoWidth, 1),\r\n Math.max(this._source.videoHeight, 1),\r\n 1,\r\n 1\r\n );\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type {\r\n VertexLayout,\r\n StructuredBuffer,\r\n VertexSemantic,\r\n VertexLayoutOptions,\r\n PrimitiveType\r\n} from '@zephyr3d/device';\r\nimport { VertexData } from '@zephyr3d/device';\r\nimport { typeMap } from './constants_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLVertexLayout\r\n extends WebGLGPUObject<WebGLVertexArrayObject | WebGLVertexArrayObjectOES>\r\n implements VertexLayout<WebGLVertexArrayObject | WebGLVertexArrayObjectOES>\r\n{\r\n private readonly _vertexData: VertexData;\r\n private _dirty: boolean;\r\n constructor(device: WebGLDevice, options: VertexLayoutOptions) {\r\n super(device);\r\n this._vertexData = new VertexData();\r\n this._dirty = false;\r\n for (const vb of options.vertexBuffers) {\r\n this._vertexData.setVertexBuffer(vb.buffer, vb.stepMode);\r\n }\r\n if (options.indexBuffer) {\r\n this._vertexData.setIndexBuffer(options.indexBuffer);\r\n }\r\n this.load();\r\n }\r\n destroy() {\r\n if (this._object && this._device.vaoExt) {\r\n this._device.vaoExt.deleteVertexArray(this._object);\r\n }\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n get vertexBuffers() {\r\n return this._vertexData.vertexBuffers;\r\n }\r\n get indexBuffer() {\r\n return this._vertexData.indexBuffer;\r\n }\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number) {\r\n for (const info of this._vertexData.vertexBuffers) {\r\n if (info?.buffer === buffer && info.drawOffset !== byteOffset) {\r\n info.drawOffset = byteOffset;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n getVertexBuffer(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBuffer(semantic);\r\n }\r\n getVertexBufferInfo(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBufferInfo(semantic);\r\n }\r\n getIndexBuffer() {\r\n return this._vertexData.getIndexBuffer();\r\n }\r\n bind() {\r\n if (this._object && this._device.vaoExt) {\r\n this._device.vaoExt.bindVertexArray(this._object);\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this.bindBuffers();\r\n }\r\n } else {\r\n this.bindBuffers();\r\n }\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this._device.setVertexLayout(this);\r\n this._device.draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this._device.setVertexLayout(this);\r\n this._device.drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return true;\r\n }\r\n private load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (this._device.vaoExt) {\r\n if (!this._object) {\r\n this._object = this._device.vaoExt.createVertexArray();\r\n this._device.vaoExt.bindVertexArray(this._object);\r\n this.bindBuffers();\r\n this._device.vaoExt.bindVertexArray(null);\r\n }\r\n } else {\r\n this._object = {};\r\n }\r\n }\r\n private bindBuffers() {\r\n const vertexBuffers = this._vertexData.vertexBuffers;\r\n const gl = this._device.context;\r\n for (let loc = 0; loc < vertexBuffers.length; loc++) {\r\n const bufferInfo = vertexBuffers[loc];\r\n const buffer = bufferInfo?.buffer;\r\n if (buffer) {\r\n if (buffer.disposed) {\r\n buffer.reload();\r\n }\r\n gl.bindBuffer(WebGLEnum.ARRAY_BUFFER, buffer.object!);\r\n gl.enableVertexAttribArray(loc);\r\n if (bufferInfo.stepMode === 'instance' && this._device.instancedArraysExt) {\r\n gl.vertexAttribPointer(\r\n loc,\r\n bufferInfo.type.cols,\r\n typeMap[bufferInfo.type.scalarType],\r\n bufferInfo.type.normalized,\r\n bufferInfo.stride,\r\n bufferInfo.offset\r\n );\r\n this._device.instancedArraysExt.vertexAttribDivisor(loc, 1);\r\n } else {\r\n gl.vertexAttribPointer(\r\n loc,\r\n bufferInfo.type.cols,\r\n typeMap[bufferInfo.type.scalarType],\r\n bufferInfo.type.normalized,\r\n bufferInfo.stride,\r\n bufferInfo.drawOffset + bufferInfo.offset\r\n );\r\n }\r\n } else {\r\n gl.disableVertexAttribArray(loc);\r\n }\r\n }\r\n if (this._vertexData.indexBuffer?.disposed) {\r\n this._vertexData.indexBuffer.reload();\r\n }\r\n gl.bindBuffer(\r\n WebGLEnum.ELEMENT_ARRAY_BUFFER,\r\n this._vertexData.indexBuffer ? this._vertexData.indexBuffer.object! : null\r\n );\r\n }\r\n}\r\n","import type { GPUDataBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { isWebGL2 } from './utils';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLGPUBuffer extends WebGLGPUObject<WebGLBuffer> implements GPUDataBuffer<WebGLBuffer> {\r\n protected _size: number;\r\n protected _usage: number;\r\n protected _systemMemoryBuffer: Nullable<Uint8Array<ArrayBuffer>>;\r\n protected _systemMemory: boolean;\r\n protected _memCost: number;\r\n constructor(device: WebGLDevice, usage: number, data: TypedArray | number, systemMemory = false) {\r\n super(device);\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX && usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('buffer usage must not have Vertex and Index simultaneously');\r\n }\r\n if (\r\n !device.isWebGL2 &&\r\n !(usage & GPUResourceUsageFlags.BF_VERTEX) &&\r\n !(usage & GPUResourceUsageFlags.BF_INDEX) &&\r\n !(usage & GPUResourceUsageFlags.BF_UNIFORM)\r\n ) {\r\n throw new Error('no Vertex or Index or Uniform usage set when creating buffer');\r\n }\r\n if (device.isWebGL2 && !(usage & ~GPUResourceUsageFlags.DYNAMIC)) {\r\n throw new Error('buffer usage not set when creating buffer');\r\n }\r\n if (usage & GPUResourceUsageFlags.DYNAMIC && usage & GPUResourceUsageFlags.MANAGED) {\r\n throw new Error('buffer usage DYNAMIC and MANAGED can not be both set');\r\n }\r\n this._object = null;\r\n this._memCost = 0;\r\n this._usage = usage;\r\n this._size = typeof data === 'number' ? data : data.byteLength;\r\n if (this._size <= 0) {\r\n throw new Error('can not create buffer with zero size');\r\n }\r\n this._systemMemory = !!systemMemory;\r\n if (this._systemMemory || this._usage & GPUResourceUsageFlags.MANAGED) {\r\n this._systemMemoryBuffer = new Uint8Array(this._size);\r\n if (data && typeof data !== 'number') {\r\n this._systemMemoryBuffer.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\r\n }\r\n } else {\r\n this._systemMemoryBuffer = null;\r\n }\r\n if (!this._systemMemory) {\r\n this.load(this._systemMemoryBuffer || (typeof data === 'number' ? null : data));\r\n }\r\n }\r\n get byteLength() {\r\n return this._size;\r\n }\r\n get systemMemoryBuffer() {\r\n return this._systemMemoryBuffer?.buffer || null;\r\n }\r\n get usage() {\r\n return this._usage;\r\n }\r\n bufferSubData(dstByteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n srcPos = Number(srcPos) || 0;\r\n dstByteOffset = Number(dstByteOffset) || 0;\r\n srcLength = Number(srcLength) || data.length - srcPos;\r\n if (srcPos + srcLength > data.length) {\r\n throw new Error('bufferSubData() failed: source buffer is too small');\r\n }\r\n if (dstByteOffset + srcLength * data.BYTES_PER_ELEMENT > this.byteLength) {\r\n throw new Error('bufferSubData() failed: dest buffer is too small');\r\n }\r\n if (this._systemMemoryBuffer) {\r\n // copy to system backup buffer if present\r\n this._systemMemoryBuffer.set(\r\n new Uint8Array(\r\n data.buffer,\r\n data.byteOffset + srcPos * data.BYTES_PER_ELEMENT,\r\n srcLength * data.BYTES_PER_ELEMENT\r\n ),\r\n dstByteOffset\r\n );\r\n }\r\n if (!this._systemMemory && !this.device.isContextLost()) {\r\n if (this.disposed) {\r\n this.reload();\r\n }\r\n if (!this._device.isWebGL2 && (srcPos !== 0 || srcLength !== data.length)) {\r\n data = data.subarray(srcPos, srcPos + srcLength);\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_WRITE)) {\r\n target = WebGLEnum.COPY_WRITE_BUFFER;\r\n } else if (\r\n this._usage &\r\n (GPUResourceUsageFlags.BF_PACK_PIXEL | GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n } else {\r\n throw new Error(`Invalid buffer usage`);\r\n }\r\n this._device.context.bindBuffer(target, this._object);\r\n if (this._device.isWebGL2) {\r\n (this._device.context as WebGL2RenderingContext).bufferSubData(\r\n target,\r\n dstByteOffset,\r\n data,\r\n srcPos,\r\n srcLength\r\n );\r\n } else {\r\n this._device.context.bufferSubData(target, dstByteOffset, data);\r\n }\r\n }\r\n }\r\n async getBufferSubData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n if (this.disposed) {\r\n this.reload();\r\n }\r\n return this._getBufferData(dstBuffer, offsetInBytes, sizeInBytes);\r\n }\r\n protected async _getBufferData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n offsetInBytes = Number(offsetInBytes) || 0;\r\n sizeInBytes = Number(sizeInBytes) || this.byteLength - offsetInBytes;\r\n if (offsetInBytes < 0 || offsetInBytes + sizeInBytes > this.byteLength) {\r\n throw new Error('data query range out of bounds');\r\n }\r\n if (dstBuffer && dstBuffer.byteLength < sizeInBytes) {\r\n throw new Error('no enough space for querying buffer data');\r\n }\r\n dstBuffer = dstBuffer || new Uint8Array(sizeInBytes);\r\n if (this._systemMemoryBuffer) {\r\n dstBuffer.set(new Uint8Array(this._systemMemoryBuffer.buffer, offsetInBytes, sizeInBytes));\r\n } else {\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n if (isWebGL2(gl)) {\r\n const sync = gl.fenceSync(WebGLEnum.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (sync) {\r\n await this.clientWaitAsync(gl, sync, 0, 10);\r\n gl.deleteSync(sync);\r\n }\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_WRITE)) {\r\n target = WebGLEnum.COPY_READ_BUFFER;\r\n } else if (\r\n this._usage &\r\n (GPUResourceUsageFlags.BF_PACK_PIXEL | GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n target = WebGLEnum.PIXEL_UNPACK_BUFFER;\r\n } else {\r\n throw new Error(`Invalid buffer usage`);\r\n }\r\n gl.bindBuffer(target, this._object);\r\n gl.getBufferSubData(target, offsetInBytes, dstBuffer, 0, sizeInBytes);\r\n gl.bindBuffer(target, null);\r\n }\r\n return dstBuffer;\r\n }\r\n restore() {\r\n if (!this._systemMemory && !this._object && !this._device.isContextLost()) {\r\n this.load(this._systemMemoryBuffer);\r\n }\r\n }\r\n destroy() {\r\n if (!this._systemMemory && this._object) {\r\n this._device.context.deleteBuffer(this._object);\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n this._memCost = 0;\r\n }\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return true;\r\n }\r\n protected load(data: Nullable<TypedArray>) {\r\n if (!this._device.isContextLost()) {\r\n if (!this._object) {\r\n this._object = this._device.context.createBuffer();\r\n }\r\n this._device.vaoExt?.bindVertexArray(null);\r\n let usage =\r\n this._usage & GPUResourceUsageFlags.DYNAMIC ? WebGLEnum.DYNAMIC_DRAW : WebGLEnum.STATIC_DRAW;\r\n let target: number;\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n target = WebGLEnum.ELEMENT_ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n target = WebGLEnum.ARRAY_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n target = WebGLEnum.UNIFORM_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_READ) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n usage = WebGLEnum.STREAM_READ;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_WRITE) {\r\n target = WebGLEnum.COPY_WRITE_BUFFER;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_PACK_PIXEL) {\r\n target = WebGLEnum.PIXEL_PACK_BUFFER;\r\n usage = WebGLEnum.STREAM_READ;\r\n } else if (this._usage & GPUResourceUsageFlags.BF_UNPACK_PIXEL) {\r\n target = WebGLEnum.PIXEL_UNPACK_BUFFER;\r\n } else {\r\n throw new Error(`WebGLGPUBuffer.load() failed: invalid buffer usage: ${this._usage}`);\r\n }\r\n this._device.context.bindBuffer(target, this._object);\r\n if (data) {\r\n this._device.context.bufferData(target, data, usage);\r\n } else {\r\n this._device.context.bufferData(target, (this._size + 15) & ~15, usage);\r\n }\r\n }\r\n this._device.updateVideoMemoryCost(this._size - this._memCost);\r\n this._memCost = this._size;\r\n }\r\n /** @internal */\r\n private async clientWaitAsync(\r\n gl: WebGL2RenderingContext,\r\n sync: WebGLSync,\r\n flags: number,\r\n interval_ms: number\r\n ) {\r\n return new Promise<void>((resolve, reject) => {\r\n function test() {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n reject();\r\n return;\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n setTimeout(test, interval_ms);\r\n return;\r\n }\r\n resolve();\r\n }\r\n test();\r\n });\r\n }\r\n}\r\n","import type { IndexBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags, PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\n\r\nexport class WebGLIndexBuffer extends WebGLGPUBuffer implements IndexBuffer {\r\n readonly indexType: PBPrimitiveTypeInfo;\r\n readonly length: number;\r\n constructor(\r\n device: WebGLDevice,\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n usage?: number\r\n ) {\r\n if (!(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n throw new Error('invalid index data');\r\n }\r\n super(device, GPUResourceUsageFlags.BF_INDEX | (usage ?? 0), data);\r\n this.indexType = data instanceof Uint16Array ? typeU16 : typeU32;\r\n this.length = data.length;\r\n }\r\n}\r\n","import { CubeFace, type Nullable } from '@zephyr3d/base';\r\nimport type { BaseTexture, FrameBuffer, FrameBufferOptions } from '@zephyr3d/device';\r\nimport { hasStencilChannel } from '@zephyr3d/device';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { cubeMapFaceMap } from './constants_webgl';\r\nimport type { WebGLTextureCaps } from './capabilities_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { WebGLTexture2D } from './texture2d_webgl';\r\nimport type { WebGLTextureCube } from './texturecube_webgl';\r\n\r\ntype FrameBufferTextureAttachment = {\r\n texture: BaseTexture;\r\n face?: number;\r\n layer?: number;\r\n level?: number;\r\n generateMipmaps?: boolean;\r\n};\r\n\r\ntype Options = {\r\n colorAttachments: Nullable<FrameBufferTextureAttachment[]>;\r\n depthAttachment: Nullable<FrameBufferTextureAttachment>;\r\n sampleCount?: number;\r\n ignoreDepthStencil?: boolean;\r\n};\r\n\r\nconst STATUS_UNCHECKED = 0;\r\nconst STATUS_OK = 1;\r\nconst STATUS_FAILED = 2;\r\nexport class WebGLFrameBuffer\r\n extends WebGLGPUObject<WebGLFramebuffer>\r\n implements FrameBuffer<WebGLFramebuffer>\r\n{\r\n private readonly _options: Options;\r\n private _needBindBuffers: boolean;\r\n private _drawTags: number;\r\n private _lastDrawTag: number;\r\n private _status: number;\r\n private _statusAA: number;\r\n private readonly _width: number;\r\n private readonly _height: number;\r\n private readonly _isMRT: boolean;\r\n private _drawBuffers: number[];\r\n private readonly _hash: string;\r\n private _needGenerateMipmaps: boolean;\r\n private readonly _depthAttachmentTarget: number;\r\n private _colorAttachmentsAA: Nullable<WebGLRenderbuffer[]>;\r\n private _depthAttachmentAA: Nullable<WebGLRenderbuffer>;\r\n private _intermediateAttachments: Nullable<\r\n Map<BaseTexture, { texture: WebGLTexture; width: number; height: number }[]>\r\n >;\r\n private _framebufferAA: Nullable<WebGLFramebuffer>;\r\n private _initialized: boolean;\r\n constructor(\r\n device: WebGLDevice,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n opt?: FrameBufferOptions\r\n ) {\r\n super(device);\r\n if (colorAttachments.length > 0 && colorAttachments.findIndex((val) => !val) >= 0) {\r\n throw new Error('WebGLFramebuffer(): invalid color attachments');\r\n }\r\n this._object = null;\r\n this._framebufferAA = null;\r\n this._colorAttachmentsAA = null;\r\n this._depthAttachmentAA = null;\r\n this._intermediateAttachments = null;\r\n this._needBindBuffers = false;\r\n this._drawTags = 0;\r\n this._lastDrawTag = -1;\r\n this._status = STATUS_UNCHECKED;\r\n this._statusAA = STATUS_UNCHECKED;\r\n this._options = {\r\n colorAttachments:\r\n colorAttachments?.length > 0\r\n ? colorAttachments.map((value) => ({\r\n texture: value,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: true\r\n }))\r\n : null,\r\n depthAttachment: depthAttachment\r\n ? {\r\n texture: depthAttachment,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: false\r\n }\r\n : null,\r\n sampleCount: device.type === 'webgl' ? 1 : (opt?.sampleCount ?? 1),\r\n ignoreDepthStencil: opt?.ignoreDepthStencil ?? false\r\n };\r\n if (!this._options.colorAttachments && !this._options.depthAttachment) {\r\n throw new Error('WebGLFramebuffer(): colorAttachments or depthAttachment must be specified');\r\n }\r\n this._width = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.width\r\n : this._options.depthAttachment!.texture.width;\r\n this._height = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.height\r\n : this._options.depthAttachment!.texture.height;\r\n if (\r\n (this._options.colorAttachments &&\r\n this._options.colorAttachments.findIndex(\r\n (val) => val.texture.width !== this._width || val.texture.height !== this._height\r\n ) >= 0) ||\r\n (this._options.depthAttachment &&\r\n (this._options.depthAttachment.texture.width !== this._width ||\r\n this._options.depthAttachment.texture.height !== this._height))\r\n ) {\r\n throw new Error('WebGLFramebuffer(): attachment textures must have same width and height');\r\n }\r\n this._drawBuffers =\r\n this._options.colorAttachments?.map((val, index) => WebGLEnum.COLOR_ATTACHMENT0 + index) ?? [];\r\n this._isMRT = this._drawBuffers.length > 1;\r\n if (this._options.depthAttachment) {\r\n const format = this._options.depthAttachment.texture.format;\r\n this._depthAttachmentTarget = hasStencilChannel(format)\r\n ? WebGLEnum.DEPTH_STENCIL_ATTACHMENT\r\n : WebGLEnum.DEPTH_ATTACHMENT;\r\n } else {\r\n this._depthAttachmentTarget = WebGLEnum.NONE;\r\n }\r\n const colorAttachmentHash =\r\n this._options.colorAttachments?.map((tex) => tex.texture.format).join(':') ?? '';\r\n const depthAttachmentHash = this._options.depthAttachment?.texture.format ?? '';\r\n this._hash = `${colorAttachmentHash}-${depthAttachmentHash}-${this._options.sampleCount ?? 1}`;\r\n this._needGenerateMipmaps = false;\r\n this._initialized = false;\r\n }\r\n tagDraw() {\r\n this._drawTags++;\r\n }\r\n isMRT() {\r\n return this._isMRT;\r\n }\r\n invalidateMipmaps() {\r\n this._needGenerateMipmaps = true;\r\n }\r\n getWidth() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment!;\r\n return Math.max(attachment.texture.width >> attachment.level!, 1);\r\n }\r\n getHeight() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment!;\r\n return Math.max(attachment.texture.height >> attachment.level!, 1);\r\n }\r\n getHash() {\r\n return this._hash;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n if (this._options?.depthAttachment?.texture?.disposed) {\r\n this._options.depthAttachment.texture.reload();\r\n }\r\n if (this._options?.colorAttachments) {\r\n for (const k of this._options.colorAttachments) {\r\n if (k?.texture?.disposed) {\r\n k.texture.reload();\r\n }\r\n }\r\n }\r\n }\r\n this._init();\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteFramebuffer(this._object);\r\n this._object = null;\r\n if (this._colorAttachmentsAA) {\r\n for (const rb of this._colorAttachmentsAA) {\r\n this._device.context.deleteRenderbuffer(rb);\r\n }\r\n this._colorAttachmentsAA = null;\r\n }\r\n if (this._depthAttachmentAA) {\r\n this._device.context.deleteRenderbuffer(this._depthAttachmentAA);\r\n this._depthAttachmentAA = null;\r\n }\r\n if (this._framebufferAA) {\r\n this._device.context.deleteFramebuffer(this._framebufferAA);\r\n this._framebufferAA = null;\r\n }\r\n if (this._intermediateAttachments) {\r\n for (const entry of this._intermediateAttachments) {\r\n for (const rb of entry[1]) {\r\n if (rb) {\r\n this._device.context.deleteTexture(rb.texture);\r\n this._device.invalidateBindingTextures();\r\n }\r\n }\r\n }\r\n this._intermediateAttachments = null;\r\n }\r\n }\r\n }\r\n setColorAttachmentGenerateMipmaps(index: number, generateMipmaps: boolean) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k) {\r\n k.generateMipmaps = !!generateMipmaps;\r\n }\r\n }\r\n getColorAttachmentGenerateMipmaps(index: number) {\r\n return !!this._options.colorAttachments?.[index]?.generateMipmaps;\r\n }\r\n setColorAttachmentCubeFace(index: number, face: CubeFace) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.face !== face) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.face = face;\r\n this.bind();\r\n } else {\r\n k.face = face;\r\n }\r\n }\r\n }\r\n getColorAttachmentCubeFace(index: number) {\r\n return (this._options.colorAttachments?.[index]?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setColorAttachmentMipLevel(index: number, level: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.level !== level) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.level = level;\r\n this.bind();\r\n } else {\r\n k.level = level;\r\n }\r\n }\r\n }\r\n getColorAttachmentMipLevel(index: number) {\r\n return this._options.colorAttachments?.[index]?.level ?? 0;\r\n }\r\n setColorAttachmentLayer(index: number, layer: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.layer !== layer) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.layer = layer;\r\n this.bind();\r\n } else {\r\n k.layer = layer;\r\n }\r\n }\r\n }\r\n getColorAttachmentLayer(index: number) {\r\n return this._options?.colorAttachments?.[index]?.layer ?? 0;\r\n }\r\n setDepthAttachmentCubeFace(face: CubeFace) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.face !== face) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.face = face;\r\n this.bind();\r\n } else {\r\n k.face = face;\r\n }\r\n }\r\n }\r\n getDepthAttachmentCubeFace() {\r\n return (this._options.depthAttachment?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setDepthAttachmentLayer(layer: number) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.layer !== layer) {\r\n this._needBindBuffers = true;\r\n if (this._device.context._currentFramebuffer === this) {\r\n this.unbind();\r\n k.layer = layer;\r\n this.bind();\r\n } else {\r\n k.layer = layer;\r\n }\r\n }\r\n }\r\n getDepthAttachmentLayer() {\r\n return this._options.depthAttachment?.layer ?? 0;\r\n }\r\n getDepthAttachment() {\r\n return this._options?.depthAttachment?.texture || null;\r\n }\r\n getColorAttachments() {\r\n return this._options.colorAttachments?.map((val) => val.texture || null) || [];\r\n }\r\n getColorAttachment<T extends BaseTexture>(index: number): T {\r\n return (this.getColorAttachments()[index] as unknown as T) ?? null;\r\n }\r\n bind() {\r\n if (!this._initialized) {\r\n this._init();\r\n this._initialized = true;\r\n }\r\n if (this._object) {\r\n this._device.context._currentFramebuffer = this;\r\n this._lastDrawTag = -1;\r\n if (this._needBindBuffers) {\r\n this._needBindBuffers = false;\r\n if (!this._bindBuffersAA() || !this._bindBuffers()) {\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n return false;\r\n }\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._framebufferAA || this._object);\r\n const drawBuffersExt = this._device.drawBuffersExt;\r\n if (drawBuffersExt) {\r\n drawBuffersExt.drawBuffers(this._drawBuffers);\r\n } else if (this._isMRT) {\r\n console.error('device does not support multiple framebuffer color attachments');\r\n }\r\n this._device.setViewport(null);\r\n this._device.setScissor(null);\r\n this._needGenerateMipmaps = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n unbind() {\r\n if (this._device.context._currentFramebuffer === this) {\r\n this._updateMSAABuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n this._device.setViewport(null);\r\n this._device.setScissor(null);\r\n const drawBuffersExt = this._device.drawBuffersExt;\r\n if (drawBuffersExt) {\r\n drawBuffersExt.drawBuffers([WebGLEnum.BACK]);\r\n }\r\n if (this._options.colorAttachments) {\r\n for (const attachment of this._options.colorAttachments) {\r\n const tex = attachment.texture;\r\n if (attachment.level! > 0) {\r\n const texture = this._intermediateAttachments?.get(tex)?.[attachment.level!];\r\n if (texture) {\r\n const tmpFramebuffer = this._device.context.createFramebuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, tmpFramebuffer);\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n WebGLEnum.COLOR_ATTACHMENT0,\r\n WebGLEnum.TEXTURE_2D,\r\n texture.texture,\r\n 0\r\n );\r\n if (tex.isTexture2D()) {\r\n this._device.bindTexture(WebGLEnum.TEXTURE_2D, 0, tex as WebGLTexture2D);\r\n //this._device.context.bindTexture(WebGLEnum.TEXTURE_2D, tex.object);\r\n this._device.context.copyTexSubImage2D(\r\n WebGLEnum.TEXTURE_2D,\r\n attachment.level!,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n texture.width,\r\n texture.height\r\n );\r\n } else if (tex.isTextureCube()) {\r\n this._device.bindTexture(WebGLEnum.TEXTURE_CUBE_MAP, 0, tex as WebGLTextureCube);\r\n //this._device.context.bindTexture(WebGLEnum.TEXTURE_CUBE_MAP, tex.object);\r\n this._device.context.copyTexSubImage2D(\r\n cubeMapFaceMap[(attachment.face as CubeFace) ?? CubeFace.PX],\r\n attachment.level!,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n texture.width,\r\n texture.height\r\n );\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context.deleteFramebuffer(tmpFramebuffer);\r\n }\r\n }\r\n if (this._needGenerateMipmaps && attachment.generateMipmaps && tex.mipLevelCount > 1) {\r\n tex.generateMipmaps();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private _updateMSAABuffer() {\r\n if (this._options.sampleCount! > 1 && this._lastDrawTag !== this._drawTags) {\r\n const gl = this._device.context as WebGL2RenderingContext;\r\n gl.bindFramebuffer(WebGLEnum.READ_FRAMEBUFFER, this._framebufferAA);\r\n gl.bindFramebuffer(WebGLEnum.DRAW_FRAMEBUFFER, this._object);\r\n let depthStencilMask = 0;\r\n if (!this._options.ignoreDepthStencil && this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n depthStencilMask =\r\n WebGLEnum.DEPTH_BUFFER_BIT |\r\n (this._depthAttachmentTarget === WebGLEnum.DEPTH_STENCIL_ATTACHMENT\r\n ? WebGLEnum.STENCIL_BUFFER_BIT\r\n : 0);\r\n }\r\n for (let i = 0; i < this._drawBuffers.length; i++) {\r\n for (let j = 0; j < this._drawBuffers.length; j++) {\r\n this._drawBuffers[j] = j === i ? WebGLEnum.COLOR_ATTACHMENT0 + i : WebGLEnum.NONE;\r\n }\r\n gl.readBuffer(this._drawBuffers[i]);\r\n gl.drawBuffers(this._drawBuffers);\r\n gl.blitFramebuffer(\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n WebGLEnum.COLOR_BUFFER_BIT | depthStencilMask,\r\n WebGLEnum.NEAREST\r\n );\r\n depthStencilMask = 0;\r\n }\r\n if (depthStencilMask !== 0) {\r\n gl.blitFramebuffer(\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n 0,\r\n 0,\r\n this._width,\r\n this._height,\r\n depthStencilMask,\r\n WebGLEnum.NEAREST\r\n );\r\n }\r\n for (let i = 0; i < this._drawBuffers.length; i++) {\r\n this._drawBuffers[i] = WebGLEnum.COLOR_ATTACHMENT0 + i;\r\n }\r\n gl.bindFramebuffer(WebGLEnum.READ_FRAMEBUFFER, null);\r\n gl.bindFramebuffer(WebGLEnum.DRAW_FRAMEBUFFER, null);\r\n this._lastDrawTag = this._drawTags;\r\n }\r\n }\r\n private _load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n load: {\r\n if (this._options.sampleCount! > 1) {\r\n this._framebufferAA = this._device.context.createFramebuffer();\r\n this._colorAttachmentsAA = [];\r\n this._depthAttachmentAA = null;\r\n if (!this._bindBuffersAA()) {\r\n this.dispose();\r\n break load;\r\n }\r\n }\r\n this._object = this._device.context.createFramebuffer();\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._object);\r\n if (!this._bindBuffers()) {\r\n this.dispose();\r\n }\r\n }\r\n this._lastDrawTag = -1;\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, null);\r\n this._device.context._currentFramebuffer = null;\r\n }\r\n private _bindAttachment(attachment: number, info: FrameBufferTextureAttachment) {\r\n if (info.texture) {\r\n let intermediateTexture: Nullable<WebGLTexture> = null;\r\n if (\r\n this.device.type === 'webgl' &&\r\n !this.device.getDeviceCaps().framebufferCaps.supportRenderMipmap &&\r\n info.level! > 0\r\n ) {\r\n if (!this._intermediateAttachments) {\r\n this._intermediateAttachments = new Map();\r\n }\r\n let intermediateAttachments = this._intermediateAttachments.get(info.texture);\r\n if (!intermediateAttachments) {\r\n intermediateAttachments = [];\r\n this._intermediateAttachments.set(info.texture, intermediateAttachments);\r\n }\r\n if (!intermediateAttachments[info.level!]) {\r\n let width = info.texture.width;\r\n let height = info.texture.height;\r\n let level = info.level!;\r\n while (level-- > 0) {\r\n width = Math.max(width >> 1, 1);\r\n height = Math.max(height >> 1, 1);\r\n }\r\n const formatInfo = (\r\n this.device.getDeviceCaps().textureCaps as WebGLTextureCaps\r\n ).getTextureFormatInfo(info.texture.format);\r\n intermediateTexture = this._device.context.createTexture();\r\n this._device.context.activeTexture(WebGLEnum.TEXTURE0);\r\n this._device.context.bindTexture(WebGLEnum.TEXTURE_2D, intermediateTexture);\r\n this._device.context.texImage2D(\r\n WebGLEnum.TEXTURE_2D,\r\n 0,\r\n formatInfo.glInternalFormat,\r\n width,\r\n height,\r\n 0,\r\n formatInfo.glFormat,\r\n formatInfo.glType[0],\r\n null\r\n );\r\n intermediateAttachments[info.level!] = { texture: intermediateTexture, width, height };\r\n this._device.bindTexture(WebGLEnum.TEXTURE_2D, 0, null);\r\n } else {\r\n intermediateTexture = intermediateAttachments[info.level!].texture;\r\n }\r\n }\r\n if (intermediateTexture) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n WebGLEnum.TEXTURE_2D,\r\n intermediateTexture,\r\n 0\r\n );\r\n } else {\r\n if (info.texture.isTexture2D()) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n WebGLEnum.TEXTURE_2D,\r\n info.texture.object!,\r\n info.level ?? 0\r\n );\r\n } else if (info.texture.isTextureCube()) {\r\n this._device.context.framebufferTexture2D(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n cubeMapFaceMap[(info.face as CubeFace) ?? CubeFace.PX],\r\n info.texture.object!,\r\n info.level ?? 0\r\n );\r\n } else if (info.texture.isTexture2DArray() || info.texture.isTexture3D()) {\r\n (this._device.context as WebGL2RenderingContext).framebufferTextureLayer(\r\n WebGLEnum.FRAMEBUFFER,\r\n attachment,\r\n info.texture.object!,\r\n info.level ?? 0,\r\n info.layer ?? 0\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n private _bindBuffers() {\r\n if (!this._object) {\r\n return false;\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._object);\r\n if (this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n if (!this._bindAttachment(this._depthAttachmentTarget, this._options.depthAttachment!)) {\r\n return false;\r\n }\r\n }\r\n if (this._options.colorAttachments) {\r\n for (let i = 0; i < this._options.colorAttachments.length; i++) {\r\n const opt = this._options.colorAttachments[i];\r\n if (opt.texture) {\r\n if (!this._bindAttachment(WebGLEnum.COLOR_ATTACHMENT0 + i, opt)) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n if (this._status === STATUS_UNCHECKED) {\r\n const status = this._device.context.checkFramebufferStatus(WebGLEnum.FRAMEBUFFER);\r\n if (status !== WebGLEnum.FRAMEBUFFER_COMPLETE) {\r\n console.error(`Framebuffer not complete: ${status}`);\r\n this._status = STATUS_FAILED;\r\n } else {\r\n this._status = STATUS_OK;\r\n }\r\n }\r\n return this._status === STATUS_OK;\r\n }\r\n private _createRenderbufferAA(texture: BaseTexture) {\r\n const renderBuffer = this._device.context.createRenderbuffer();\r\n const formatInfo = (this.device.getDeviceCaps().textureCaps as WebGLTextureCaps).getTextureFormatInfo(\r\n texture.format\r\n );\r\n this._device.context.bindRenderbuffer(WebGLEnum.RENDERBUFFER, renderBuffer);\r\n (this._device.context as WebGL2RenderingContext).renderbufferStorageMultisample(\r\n WebGLEnum.RENDERBUFFER,\r\n this._options.sampleCount!,\r\n formatInfo.glInternalFormat,\r\n this._options.depthAttachment!.texture.width,\r\n this._options.depthAttachment!.texture.height\r\n );\r\n return renderBuffer;\r\n }\r\n private _bindBuffersAA() {\r\n if (!this._framebufferAA) {\r\n return true;\r\n }\r\n this._device.context.bindFramebuffer(WebGLEnum.FRAMEBUFFER, this._framebufferAA);\r\n if (this._depthAttachmentTarget !== WebGLEnum.NONE) {\r\n if (!this._depthAttachmentAA) {\r\n this._depthAttachmentAA = this._createRenderbufferAA(this._options.depthAttachment!.texture);\r\n }\r\n this._device.context.framebufferRenderbuffer(\r\n WebGLEnum.FRAMEBUFFER,\r\n this._depthAttachmentTarget,\r\n WebGLEnum.RENDERBUFFER,\r\n this._depthAttachmentAA\r\n );\r\n }\r\n if (this._options.colorAttachments) {\r\n for (let i = 0; i < this._options.colorAttachments.length; i++) {\r\n const opt = this._options.colorAttachments[i];\r\n if (opt.texture) {\r\n if (!this._colorAttachmentsAA![i]) {\r\n this._colorAttachmentsAA![i] = this._createRenderbufferAA(\r\n this._options.colorAttachments[i].texture\r\n );\r\n }\r\n this._device.context.framebufferRenderbuffer(\r\n WebGLEnum.FRAMEBUFFER,\r\n WebGLEnum.COLOR_ATTACHMENT0 + i,\r\n WebGLEnum.RENDERBUFFER,\r\n this._colorAttachmentsAA![i]\r\n );\r\n }\r\n }\r\n }\r\n if (this._statusAA === STATUS_UNCHECKED) {\r\n const status = this._device.context.checkFramebufferStatus(WebGLEnum.FRAMEBUFFER);\r\n if (status !== WebGLEnum.FRAMEBUFFER_COMPLETE) {\r\n console.error(`Framebuffer not complete: ${status}`);\r\n this._statusAA = STATUS_FAILED;\r\n } else {\r\n this._statusAA = STATUS_OK;\r\n }\r\n }\r\n return this._statusAA === STATUS_OK;\r\n }\r\n private _init() {\r\n if (this._options.sampleCount !== 1 && this._options.sampleCount !== 4) {\r\n throw new Error(`WebGLFramebuffer(): Sample should be 1 or 4, got ${this._options.sampleCount}`);\r\n }\r\n if (\r\n this._options.sampleCount > 1 &&\r\n !this._device.getDeviceCaps().framebufferCaps.supportMultisampledFramebuffer\r\n ) {\r\n throw new Error('WebGLFramebuffer(): Multisampled frame buffer not supported');\r\n }\r\n this._load();\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return true;\r\n }\r\n getSampleCount() {\r\n return this._options.sampleCount!;\r\n }\r\n}\r\n","import type {\r\n ColorState,\r\n BlendingState,\r\n RasterizerState,\r\n DepthState,\r\n StencilState,\r\n RenderStateSet,\r\n CompareFunc,\r\n WebGLContext,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport {\r\n blendEquationMap,\r\n blendEquationInvMap,\r\n blendFuncMap,\r\n blendFuncInvMap,\r\n faceModeMap,\r\n faceModeInvMap,\r\n stencilOpMap,\r\n stencilOpInvMap,\r\n compareFuncMap,\r\n compareFuncInvMap\r\n} from './constants_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport abstract class WebGLRenderState {\r\n protected static _defaultState: WebGLRenderState;\r\n protected static _currentState: Nullable<WebGLRenderState>;\r\n apply(gl: WebGLContext, force?: boolean) {\r\n const c: any = this.constructor;\r\n if (force || c._currentState !== this) {\r\n this._apply(gl);\r\n }\r\n c._currentState = this;\r\n }\r\n static get defaultState() {\r\n return WebGLRenderState._defaultState;\r\n }\r\n static applyDefaults(gl: WebGLContext, force?: boolean) {\r\n if (force || this._currentState !== this._defaultState) {\r\n this._defaultState.apply(gl, force);\r\n }\r\n }\r\n protected abstract _apply(gl: WebGLContext): void;\r\n}\r\n\r\nexport class WebGLColorState extends WebGLRenderState implements ColorState {\r\n protected static _defaultState: WebGLColorState = new WebGLColorState();\r\n protected static _currentState: Nullable<WebGLColorState> = null;\r\n redMask: boolean;\r\n greenMask: boolean;\r\n blueMask: boolean;\r\n alphaMask: boolean;\r\n constructor() {\r\n super();\r\n this.redMask = this.greenMask = this.blueMask = this.alphaMask = true;\r\n }\r\n clone() {\r\n return new WebGLColorState().setColorMask(this.redMask, this.greenMask, this.blueMask, this.alphaMask);\r\n }\r\n setColorMask(r: boolean, g: boolean, b: boolean, a: boolean) {\r\n this.redMask = r;\r\n this.greenMask = g;\r\n this.blueMask = b;\r\n this.alphaMask = a;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n gl.colorMask(this.redMask, this.greenMask, this.blueMask, this.alphaMask);\r\n }\r\n}\r\n\r\nexport class WebGLBlendingState extends WebGLRenderState implements BlendingState {\r\n protected static _defaultState: WebGLBlendingState = new WebGLBlendingState();\r\n protected static _currentState: Nullable<WebGLBlendingState> = null;\r\n private _srcBlendRGB!: number;\r\n private _dstBlendRGB!: number;\r\n private _srcBlendAlpha!: number;\r\n private _dstBlendAlpha!: number;\r\n private _rgbEquation!: number;\r\n private _alphaEquation!: number;\r\n enabled: boolean;\r\n alphaToCoverageEnabled: boolean;\r\n constructor() {\r\n super();\r\n this.enabled = false;\r\n this.alphaToCoverageEnabled = false;\r\n this.srcBlendRGB = 'one';\r\n this.dstBlendRGB = 'zero';\r\n this.srcBlendAlpha = 'one';\r\n this.dstBlendAlpha = 'zero';\r\n this.rgbEquation = 'add';\r\n this.alphaEquation = 'add';\r\n }\r\n clone() {\r\n const other = new WebGLBlendingState();\r\n other.enable(this.enabled);\r\n other.enableAlphaToCoverage(this.alphaToCoverageEnabled);\r\n other.setBlendFuncRGB(this.srcBlendRGB, this.dstBlendRGB);\r\n other.setBlendFuncAlpha(this.srcBlendAlpha, this.dstBlendAlpha);\r\n other.setBlendEquation(this.rgbEquation, this.alphaEquation);\r\n return other;\r\n }\r\n get srcBlendRGB() {\r\n return blendFuncInvMap[this._srcBlendRGB];\r\n }\r\n set srcBlendRGB(val: BlendFunc) {\r\n this._srcBlendRGB = blendFuncMap[val];\r\n }\r\n get dstBlendRGB() {\r\n return blendFuncInvMap[this._dstBlendRGB];\r\n }\r\n set dstBlendRGB(val: BlendFunc) {\r\n this._dstBlendRGB = blendFuncMap[val];\r\n }\r\n get srcBlendAlpha() {\r\n return blendFuncInvMap[this._srcBlendAlpha];\r\n }\r\n set srcBlendAlpha(val: BlendFunc) {\r\n this._srcBlendAlpha = blendFuncMap[val];\r\n }\r\n get dstBlendAlpha() {\r\n return blendFuncInvMap[this._dstBlendAlpha];\r\n }\r\n set dstBlendAlpha(val: BlendFunc) {\r\n this._dstBlendAlpha = blendFuncMap[val];\r\n }\r\n get rgbEquation() {\r\n return blendEquationInvMap[this._rgbEquation];\r\n }\r\n set rgbEquation(val: BlendEquation) {\r\n this._rgbEquation = blendEquationMap[val];\r\n }\r\n get alphaEquation() {\r\n return blendEquationInvMap[this._alphaEquation];\r\n }\r\n set alphaEquation(val: BlendEquation) {\r\n this._alphaEquation = blendEquationMap[val];\r\n }\r\n enable(b: boolean) {\r\n this.enabled = !!b;\r\n return this;\r\n }\r\n enableAlphaToCoverage(b: boolean) {\r\n this.alphaToCoverageEnabled = !!b;\r\n return this;\r\n }\r\n setBlendFunc(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendFuncRGB(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n return this;\r\n }\r\n setBlendFuncAlpha(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendEquation(rgb: BlendEquation, alpha: BlendEquation) {\r\n this.rgbEquation = rgb;\r\n this.alphaEquation = alpha;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.enabled) {\r\n gl.enable(WebGLEnum.BLEND);\r\n gl.blendEquationSeparate(this._rgbEquation, this._alphaEquation);\r\n if (this._srcBlendRGB === this._srcBlendAlpha && this._dstBlendRGB === this._dstBlendAlpha) {\r\n gl.blendFunc(this._srcBlendRGB, this._dstBlendRGB);\r\n } else {\r\n gl.blendFuncSeparate(this._srcBlendRGB, this._dstBlendRGB, this._srcBlendAlpha, this._dstBlendAlpha);\r\n }\r\n } else {\r\n gl.disable(WebGLEnum.BLEND);\r\n }\r\n if (this.alphaToCoverageEnabled) {\r\n gl.enable(WebGLEnum.SAMPLE_ALPHA_TO_COVERAGE);\r\n } else {\r\n gl.disable(WebGLEnum.SAMPLE_ALPHA_TO_COVERAGE);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLRasterizerState extends WebGLRenderState implements RasterizerState {\r\n protected static _defaultState: WebGLRasterizerState = new WebGLRasterizerState();\r\n protected static _currentState: Nullable<WebGLRasterizerState> = null;\r\n private _cullMode!: number;\r\n constructor() {\r\n super();\r\n this.cullMode = 'back';\r\n }\r\n clone() {\r\n return new WebGLRasterizerState().setCullMode(this.cullMode);\r\n }\r\n get cullMode() {\r\n return faceModeInvMap[this._cullMode];\r\n }\r\n set cullMode(val: FaceMode) {\r\n this._cullMode = faceModeMap[val];\r\n }\r\n setCullMode(mode: FaceMode) {\r\n this.cullMode = mode;\r\n return this;\r\n }\r\n get depthClampEnabled() {\r\n return false;\r\n }\r\n set depthClampEnabled(val: boolean) {\r\n this.enableDepthClamp(val);\r\n }\r\n enableDepthClamp(enable: boolean) {\r\n if (enable) {\r\n console.error('Depth clamp not supported');\r\n }\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.cullMode == 'none') {\r\n gl.disable(WebGLEnum.CULL_FACE);\r\n } else {\r\n gl.enable(WebGLEnum.CULL_FACE);\r\n gl.cullFace(this._cullMode);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLDepthState extends WebGLRenderState implements DepthState {\r\n protected static _defaultState: WebGLDepthState = new WebGLDepthState();\r\n protected static _currentState: Nullable<WebGLDepthState> = null;\r\n testEnabled: boolean;\r\n writeEnabled: boolean;\r\n depthBias: number;\r\n depthBiasSlopeScale: number;\r\n private _compareFunc!: number;\r\n constructor() {\r\n super();\r\n this.testEnabled = true;\r\n this.writeEnabled = true;\r\n this.compareFunc = 'le';\r\n this.depthBias = 0;\r\n this.depthBiasSlopeScale = 0;\r\n }\r\n clone() {\r\n const other = new WebGLDepthState();\r\n other.enableTest(this.testEnabled);\r\n other.enableWrite(this.writeEnabled);\r\n other.setCompareFunc(this.compareFunc);\r\n other.setDepthBias(this.depthBias);\r\n other.setDepthBiasSlopeScale(this.depthBiasSlopeScale);\r\n return other;\r\n }\r\n get compareFunc() {\r\n return compareFuncInvMap[this._compareFunc]!;\r\n }\r\n set compareFunc(val: CompareFunc) {\r\n this._compareFunc = compareFuncMap[val];\r\n }\r\n enableTest(b: boolean) {\r\n this.testEnabled = b;\r\n return this;\r\n }\r\n enableWrite(b: boolean) {\r\n this.writeEnabled = b;\r\n return this;\r\n }\r\n setCompareFunc(func: CompareFunc) {\r\n this.compareFunc = func;\r\n return this;\r\n }\r\n setDepthBias(value: number) {\r\n this.depthBias = value;\r\n return this;\r\n }\r\n setDepthBiasSlopeScale(value: number) {\r\n this.depthBiasSlopeScale = value;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.testEnabled) {\r\n gl.enable(WebGLEnum.DEPTH_TEST);\r\n gl.depthFunc(this._compareFunc);\r\n } else {\r\n gl.disable(WebGLEnum.DEPTH_TEST);\r\n }\r\n gl.depthMask(this.writeEnabled);\r\n if (this.depthBias !== 0 || this.depthBiasSlopeScale !== 0) {\r\n gl.enable(gl.POLYGON_OFFSET_FILL);\r\n gl.polygonOffset(this.depthBiasSlopeScale, this.depthBias);\r\n } else {\r\n gl.disable(gl.POLYGON_OFFSET_FILL);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLStencilState extends WebGLRenderState implements StencilState {\r\n protected static _defaultState: WebGLStencilState = new WebGLStencilState();\r\n protected static _currentState: Nullable<WebGLStencilState> = null;\r\n enabled: boolean;\r\n writeMask: number;\r\n ref: number;\r\n readMask: number;\r\n private _failOp!: number;\r\n private _failOpBack!: number;\r\n private _zFailOp!: number;\r\n private _zFailOpBack!: number;\r\n private _passOp!: number;\r\n private _passOpBack!: number;\r\n private _func!: number;\r\n private _funcBack!: number;\r\n constructor() {\r\n super();\r\n this.enabled = false;\r\n this.failOp = this.failOpBack = 'keep';\r\n this.zFailOp = this.zFailOpBack = 'keep';\r\n this.passOp = this.passOpBack = 'keep';\r\n this.func = this.funcBack = 'always';\r\n this.ref = 0;\r\n this.writeMask = 0xffffffff;\r\n this.readMask = 0xffffffff;\r\n }\r\n clone() {\r\n const other = new WebGLStencilState();\r\n other.enable(this.enabled);\r\n other.setWriteMask(this.writeMask);\r\n other.setFrontOp(this.failOp, this.zFailOp, this.passOp);\r\n other.setBackOp(this.failOpBack, this.zFailOpBack, this.passOpBack);\r\n other.setFrontCompareFunc(this.func);\r\n other.setBackCompareFunc(this.funcBack);\r\n other.setReference(this.ref);\r\n other.setReadMask(this.readMask);\r\n return other;\r\n }\r\n get failOp() {\r\n return stencilOpInvMap[this._failOp];\r\n }\r\n set failOp(val: StencilOp) {\r\n this._failOp = stencilOpMap[val];\r\n }\r\n get failOpBack() {\r\n return stencilOpInvMap[this._failOpBack];\r\n }\r\n set failOpBack(val: StencilOp) {\r\n this._failOpBack = stencilOpMap[val];\r\n }\r\n get zFailOp() {\r\n return stencilOpInvMap[this._zFailOp];\r\n }\r\n set zFailOp(val: StencilOp) {\r\n this._zFailOp = stencilOpMap[val];\r\n }\r\n get zFailOpBack() {\r\n return stencilOpInvMap[this._zFailOpBack];\r\n }\r\n set zFailOpBack(val: StencilOp) {\r\n this._zFailOpBack = stencilOpMap[val];\r\n }\r\n get passOp() {\r\n return stencilOpInvMap[this._passOp];\r\n }\r\n set passOp(val: StencilOp) {\r\n this._passOp = stencilOpMap[val];\r\n }\r\n get passOpBack() {\r\n return stencilOpInvMap[this._passOpBack];\r\n }\r\n set passOpBack(val: StencilOp) {\r\n this._passOpBack = stencilOpMap[val];\r\n }\r\n get func() {\r\n return compareFuncInvMap[this._func]!;\r\n }\r\n set func(val: CompareFunc) {\r\n this._func = compareFuncMap[val];\r\n }\r\n get funcBack() {\r\n return compareFuncInvMap[this._funcBack]!;\r\n }\r\n set funcBack(val: CompareFunc) {\r\n this._funcBack = compareFuncMap[val];\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n setWriteMask(mask: number) {\r\n this.writeMask = mask;\r\n return this;\r\n }\r\n setFrontOp(fail: StencilOp, zfail: StencilOp, zpass: StencilOp) {\r\n this.failOp = fail;\r\n this.zFailOp = zfail;\r\n this.passOp = zpass;\r\n return this;\r\n }\r\n setBackOp(fail: StencilOp, zfail: StencilOp, zpass: StencilOp) {\r\n this.failOpBack = fail;\r\n this.zFailOpBack = zfail;\r\n this.passOpBack = zpass;\r\n return this;\r\n }\r\n setFrontCompareFunc(func: CompareFunc) {\r\n this.func = func;\r\n return this;\r\n }\r\n setBackCompareFunc(func: CompareFunc) {\r\n this.funcBack = func;\r\n return this;\r\n }\r\n setReference(ref: number) {\r\n this.ref = ref;\r\n return this;\r\n }\r\n setReadMask(mask: number) {\r\n this.readMask = mask;\r\n return this;\r\n }\r\n protected _apply(gl: WebGLContext) {\r\n if (this.enabled) {\r\n gl.enable(WebGLEnum.STENCIL_TEST);\r\n gl.stencilMaskSeparate(WebGLEnum.FRONT, this.writeMask);\r\n gl.stencilMaskSeparate(WebGLEnum.BACK, this.writeMask);\r\n gl.stencilFuncSeparate(WebGLEnum.FRONT, this._func, this.ref, this.readMask);\r\n gl.stencilFuncSeparate(WebGLEnum.BACK, this._funcBack, this.ref, this.readMask);\r\n gl.stencilOpSeparate(WebGLEnum.FRONT, this._failOp, this._zFailOp, this._passOp);\r\n gl.stencilOpSeparate(WebGLEnum.BACK, this._failOpBack, this._zFailOpBack, this._passOpBack);\r\n } else {\r\n gl.disable(WebGLEnum.STENCIL_TEST);\r\n }\r\n }\r\n}\r\n\r\nexport class WebGLRenderStateSet implements RenderStateSet {\r\n private readonly _gl: WebGLContext;\r\n colorState: Nullable<WebGLColorState>;\r\n blendingState: Nullable<WebGLBlendingState>;\r\n rasterizerState: Nullable<WebGLRasterizerState>;\r\n depthState: Nullable<WebGLDepthState>;\r\n stencilState: Nullable<WebGLStencilState>;\r\n constructor(gl: WebGLContext) {\r\n this._gl = gl;\r\n this.colorState = null;\r\n this.blendingState = null;\r\n this.rasterizerState = null;\r\n this.depthState = null;\r\n this.stencilState = null;\r\n }\r\n clone() {\r\n const newStateSet = new WebGLRenderStateSet(this._gl);\r\n newStateSet.colorState = (this.colorState?.clone() as WebGLColorState) ?? null;\r\n newStateSet.blendingState = (this.blendingState?.clone() as WebGLBlendingState) ?? null;\r\n newStateSet.rasterizerState = (this.rasterizerState?.clone() as WebGLRasterizerState) ?? null;\r\n newStateSet.depthState = (this.depthState?.clone() as WebGLDepthState) ?? null;\r\n newStateSet.stencilState = (this.stencilState?.clone() as WebGLStencilState) ?? null;\r\n return newStateSet;\r\n }\r\n copyFrom(stateSet: RenderStateSet) {\r\n this.colorState = stateSet.colorState as WebGLColorState;\r\n this.blendingState = stateSet.blendingState as WebGLBlendingState;\r\n this.rasterizerState = stateSet.rasterizerState as WebGLRasterizerState;\r\n this.depthState = stateSet.depthState as WebGLDepthState;\r\n this.stencilState = stateSet.stencilState as WebGLStencilState;\r\n }\r\n apply(force?: boolean) {\r\n const gl = this._gl;\r\n if (this.colorState) {\r\n this.colorState.apply(gl, force);\r\n } else {\r\n WebGLColorState.applyDefaults(gl, force);\r\n }\r\n if (this.blendingState) {\r\n this.blendingState.apply(gl, force);\r\n } else {\r\n WebGLBlendingState.applyDefaults(gl, force);\r\n }\r\n if (this.rasterizerState) {\r\n this.rasterizerState.apply(gl, force);\r\n } else {\r\n WebGLRasterizerState.applyDefaults(gl, force);\r\n }\r\n if (this.depthState) {\r\n this.depthState.apply(gl, force);\r\n } else {\r\n WebGLDepthState.applyDefaults(gl, force);\r\n }\r\n if (this.stencilState) {\r\n this.stencilState.apply(gl, force);\r\n } else {\r\n WebGLStencilState.applyDefaults(gl, force);\r\n }\r\n }\r\n useColorState(state?: ColorState) {\r\n return (this.colorState = (state as WebGLColorState) ?? this.colorState ?? new WebGLColorState());\r\n }\r\n defaultColorState() {\r\n this.colorState = null;\r\n }\r\n useBlendingState(state?: BlendingState) {\r\n return (this.blendingState =\r\n (state as WebGLBlendingState) ?? this.blendingState ?? new WebGLBlendingState());\r\n }\r\n defaultBlendingState() {\r\n this.blendingState = null;\r\n }\r\n useRasterizerState(state?: RasterizerState) {\r\n return (this.rasterizerState =\r\n (state as WebGLRasterizerState) ?? this.rasterizerState ?? new WebGLRasterizerState());\r\n }\r\n defaultRasterizerState() {\r\n this.rasterizerState = null;\r\n }\r\n useDepthState(state?: DepthState) {\r\n return (this.depthState = (state as WebGLDepthState) ?? this.depthState ?? new WebGLDepthState());\r\n }\r\n defaultDepthState() {\r\n this.depthState = null;\r\n }\r\n useStencilState(state?: StencilState) {\r\n return (this.stencilState = (state as WebGLStencilState) ?? this.stencilState ?? new WebGLStencilState());\r\n }\r\n defaultStencilState() {\r\n this.stencilState = null;\r\n }\r\n static applyDefaults(gl: WebGLContext, force?: boolean) {\r\n WebGLColorState.applyDefaults(gl, force);\r\n WebGLBlendingState.applyDefaults(gl, force);\r\n WebGLRasterizerState.applyDefaults(gl, force);\r\n WebGLDepthState.applyDefaults(gl, force);\r\n WebGLStencilState.applyDefaults(gl, force);\r\n }\r\n}\r\n","import { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { ITimer } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst GPU_DISJOINT_EXT = 0x8fbb;\r\nconst TIME_ELAPSED_EXT = 0x88bf;\r\n\r\nconst enum QueryState {\r\n QUERY_STATE_NONE = 0,\r\n QUERY_STATE_QUERYING = 1,\r\n QUERY_STATE_FINISHED = 2\r\n}\r\n\r\ninterface TimerQuery {\r\n createQuery: () => WebGLQuery;\r\n deleteQuery: (query: Nullable<WebGLQuery>) => void;\r\n isQuery: (query: Nullable<WebGLQuery>) => boolean;\r\n beginQuery: (target: number, query: WebGLQuery) => void;\r\n endQuery: (target: number) => void;\r\n getQuery: (target: number, pname: number) => Nullable<WebGLQuery>;\r\n getQueryObject: (query: WebGLQuery, pname: number) => any;\r\n queryCounter: (query: WebGLQuery, target: number) => void;\r\n}\r\n\r\nexport class GPUTimer implements ITimer {\r\n private readonly _device: WebGLDevice;\r\n private readonly _query: Nullable<WebGLQuery>;\r\n private _state: QueryState;\r\n private readonly _timerQuery: Nullable<TimerQuery>;\r\n private _gpuTime: Nullable<number>;\r\n constructor(device: WebGLDevice) {\r\n this._device = device;\r\n this._state = QueryState.QUERY_STATE_NONE;\r\n this._timerQuery = null;\r\n this._gpuTime = null;\r\n const gl = this._device.context;\r\n if (isWebGL2(gl)) {\r\n const ext = gl.getExtension('EXT_disjoint_timer_query_webgl2');\r\n if (ext) {\r\n this._timerQuery = {\r\n createQuery: gl.createQuery.bind(gl),\r\n deleteQuery: gl.deleteQuery.bind(gl),\r\n beginQuery: gl.beginQuery.bind(gl),\r\n endQuery: gl.endQuery.bind(gl),\r\n isQuery: gl.isQuery.bind(gl),\r\n getQuery: gl.getQuery.bind(gl),\r\n getQueryObject: gl.getQueryParameter.bind(gl),\r\n queryCounter: ext.queryCounterEXT.bind(ext)\r\n };\r\n }\r\n } else {\r\n const ext = gl.getExtension('EXT_disjoint_timer_query');\r\n if (ext) {\r\n this._timerQuery = {\r\n createQuery: ext.createQueryEXT.bind(ext),\r\n deleteQuery: ext.deleteQueryEXT.bind(ext),\r\n beginQuery: ext.beginQueryEXT.bind(ext),\r\n endQuery: ext.endQueryEXT.bind(ext),\r\n isQuery: ext.isQueryEXT.bind(ext),\r\n getQuery: ext.getQueryEXT.bind(ext),\r\n getQueryObject: ext.getQueryObjectEXT.bind(ext),\r\n queryCounter: ext.queryCounterEXT.bind(ext)\r\n };\r\n }\r\n }\r\n this._query = this._timerQuery ? this._timerQuery.createQuery() : null;\r\n }\r\n get gpuTimerSupported() {\r\n return !!this._query;\r\n }\r\n begin() {\r\n if (this._state === QueryState.QUERY_STATE_QUERYING) {\r\n this.end();\r\n }\r\n if (this._timerQuery && this._query) {\r\n this._timerQuery.beginQuery(TIME_ELAPSED_EXT, this._query);\r\n }\r\n this._gpuTime = null;\r\n this._state = QueryState.QUERY_STATE_QUERYING;\r\n }\r\n end() {\r\n if (this._state === QueryState.QUERY_STATE_QUERYING) {\r\n if (this._timerQuery) {\r\n this._timerQuery!.endQuery(TIME_ELAPSED_EXT);\r\n }\r\n this._state = QueryState.QUERY_STATE_FINISHED;\r\n }\r\n }\r\n ended() {\r\n return this._state !== QueryState.QUERY_STATE_QUERYING;\r\n }\r\n elapsed() {\r\n if (this._state === QueryState.QUERY_STATE_FINISHED) {\r\n if (\r\n this._gpuTime === null &&\r\n this._query &&\r\n this._timerQuery &&\r\n this._timerQuery.getQueryObject(this._query, WebGLEnum.QUERY_RESULT_AVAILABLE)\r\n ) {\r\n const gpuTimerDisjoint = this._device.context.getParameter(GPU_DISJOINT_EXT);\r\n if (!gpuTimerDisjoint) {\r\n this._gpuTime =\r\n Number(this._timerQuery.getQueryObject(this._query, WebGLEnum.QUERY_RESULT)) / 1000000;\r\n }\r\n }\r\n }\r\n return this._gpuTime ?? 0;\r\n }\r\n}\r\n","import { WebGLEnum } from './webgl_enum';\r\nimport { isWebGL2 } from './utils';\r\nimport type {\r\n WebGLContext,\r\n TextureFormat,\r\n FramebufferCaps,\r\n MiscCaps,\r\n ShaderCaps,\r\n TextureCaps,\r\n TextureFormatInfo\r\n} from '@zephyr3d/device';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\n\r\nexport interface TextureParams {\r\n target: number;\r\n format: number;\r\n internalFormat: number;\r\n type: number;\r\n filterable: boolean;\r\n renderable: boolean;\r\n repeatable: boolean;\r\n compressed: boolean;\r\n generateMipmap: boolean;\r\n}\r\n\r\n/*********************************************************************************************************************\r\n * Unsized Internal Formats\r\n * --------------------------------------------------------------------------------------------\r\n * GL_RGB | GL_RGB | GL_UNSIGNED_BYTE\r\n * | | GL_UNSIGNED_SHORT_5_6_5\r\n * --------------------------------------------------------------------------------------------\r\n * GL_RGBA | GL_RGBA | GL_UNSIGNED_BYTE\r\n * | | GL_UNSIGNED_SHORT_4_4_4_4\r\n * | | GL_UNSIGNED_SHORT_5_5_5_1\r\n * --------------------------------------------------------------------------------------------\r\n * GL_LUMINANCE_ALPHA | GL_LUMINANCE_ALPHA | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n * GL_LUMINANCE | GL_LUMINANCE | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n * GL_ALPHA | GL_ALPHA | GL_UNSIGNED_BYTE\r\n * --------------------------------------------------------------------------------------------\r\n *\r\n *\r\n * Sized Internal Formats\r\n * ------------------------------------------------------------------------------------------------------\r\n * Sized Internal Format | Format | Type | Renderable | Filterable\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8 | GL_RED | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8_SNORM | GL_RED | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16F | GL_RED | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32F | GL_RED | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8UI | GL_RED_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R8I | GL_RED_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16UI | GL_RED_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R16I | GL_RED_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32UI | GL_RED_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R32I | GL_RED_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8 | GL_RG | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8_SNORM | GL_RG | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16F | GL_RG | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32F | GL_RG | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8UI | GL_RG_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG8I | GL_RG_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16UI | GL_RG_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG16I | GL_RG_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32UI | GL_RG_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RG32I | GL_RG_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8 | GL_RGB | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_SRGB8 | GL_RGB | GL_UNSIGNED_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB565 | GL_RGB | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_5_6_5 | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8_SNORM | GL_RGB | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_R11F_G11F_B10F | GL_RGB | GL_UNSIGNED_INT_10F_11F_11F_REV | No | Yes\r\n * | | GL_HALF_FLOAT | |\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB9_E5 | GL_RGB | GL_UNSIGNED_INT_5_9_9_9_REV | No | Yes\r\n * | | GL_HALF_FLOAT | |\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16F | GL_RGB | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32F | GL_RGB | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8UI | GL_RGB_INTEGER | GL_UNSIGNED_BYTE | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB8I | GL_RGB_INTEGER | GL_BYTE | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16UI | GL_RGB_INTEGER | GL_UNSIGNED_SHORT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB16I | GL_RGB_INTEGER | GL_SHORT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32UI | GL_RGB_INTEGER | GL_UNSIGNED_INT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB32I | GL_RGB_INTEGER | GL_INT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_SRGB8_ALPHA8 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8_SNORM | GL_RGBA | GL_BYTE | No | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB5_A1 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_5_5_5_1 | |\r\n * | | GL_UNSIGNED_INT_2_10_10_10_REV | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA4 | GL_RGBA | GL_UNSIGNED_BYTE | Yes | Yes\r\n * | | GL_UNSIGNED_SHORT_4_4_4_4 | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGB10_A2 | GL_RGBA | GL_UNSIGNED_INT_2_10_10_10_REV | Yes | Yes\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16F | GL_RGBA | GL_HALF_FLOAT | No | Yes\r\n * | | GL_FLOAT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32F | GL_RGBA | GL_FLOAT | No | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8UI | GL_RGBA_INTEGER | GL_UNSIGNED_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA8I | GL_RGBA_INTEGER | GL_BYTE | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16UI | GL_RGBA_INTEGER | GL_UNSIGNED_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA16I | GL_RGBA_INTEGER | GL_SHORT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32UI | GL_RGBA_INTEGER | GL_UNSIGNED_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_RGBA32I | GL_RGBA_INTEGER | GL_INT | Yes | No\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT16 | GL_DEPTH_COMPONENT | GL_UNSIGNED_SHORT | N/A | N/A\r\n * | | GL_UNSIGNED_INT | |\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT24 | GL_DEPTH_COMPONENT | GL_UNSIGNED_INT | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH_COMPONENT32F | GL_DEPTH_COMPONENT | GL_FLOAT | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH24_STENCIL8 | GL_DEPTH_STENCIL | GL_UNSIGNED_INT_24_8 | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n * GL_DEPTH32F_STENCIL8 | GL_DEPTH_STENCIL | GL_FLOAT_32_UNSIGNED_INT_24_8_REV | N/A | N/A\r\n * ------------------------------------------------------------------------------------------------------\r\n *********************************************************************************************************************/\r\n\r\nexport interface TextureFormatInfoWebGL extends TextureFormatInfo {\r\n glFormat: number;\r\n glInternalFormat: number;\r\n glType: number[];\r\n}\r\n\r\nexport class WebGLFramebufferCaps implements FramebufferCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extDrawBuffers: Nullable<WEBGL_draw_buffers>;\r\n private readonly _extFloatBlending: Nullable<EXT_float_blend>;\r\n private readonly _extRenderMipmap: Nullable<OES_fbo_render_mipmap>;\r\n maxDrawBuffers: number;\r\n maxColorAttachmentBytesPerSample: number;\r\n supportRenderMipmap: boolean;\r\n supportMultisampledFramebuffer: boolean;\r\n supportFloatBlending: boolean;\r\n supportDepth32float: boolean;\r\n supportDepth32floatStencil8: boolean;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extDrawBuffers = this._isWebGL2 ? null : gl.getExtension('WEBGL_draw_buffers');\r\n this._extFloatBlending = gl.getExtension('EXT_float_blend');\r\n this._extRenderMipmap = this._isWebGL2 ? null : gl.getExtension('OES_fbo_render_mipmap');\r\n this.maxDrawBuffers =\r\n this._isWebGL2 || this._extDrawBuffers\r\n ? Math.min(\r\n gl.getParameter(WebGLEnum.MAX_COLOR_ATTACHMENTS),\r\n gl.getParameter(WebGLEnum.MAX_DRAW_BUFFERS)\r\n )\r\n : 1;\r\n this.maxColorAttachmentBytesPerSample = this.maxDrawBuffers * 16;\r\n this.supportRenderMipmap = isWebGL2(gl) || !!this._extRenderMipmap;\r\n this.supportMultisampledFramebuffer = isWebGL2(gl);\r\n this.supportFloatBlending = !!this._extFloatBlending;\r\n this.supportDepth32float = this._isWebGL2;\r\n this.supportDepth32floatStencil8 = this._isWebGL2;\r\n }\r\n}\r\n\r\nexport class WebGLMiscCaps implements MiscCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extIndexUint32: Nullable<OES_element_index_uint>;\r\n private readonly _extBlendMinMax: Nullable<EXT_blend_minmax>;\r\n supportOversizedViewport: boolean;\r\n supportBlendMinMax: boolean;\r\n support32BitIndex: boolean;\r\n supportDepthClamp: boolean;\r\n maxBindGroups: number;\r\n maxTexCoordIndex: number;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extBlendMinMax = null;\r\n this._extIndexUint32 = this._isWebGL2 ? gl.getExtension('OES_element_index_uint') : null;\r\n if (this._isWebGL2) {\r\n this.supportBlendMinMax = true;\r\n this.support32BitIndex = true;\r\n } else {\r\n this._extBlendMinMax = gl.getExtension('EXT_blend_minmax');\r\n this.supportBlendMinMax = !!this._extBlendMinMax;\r\n this.support32BitIndex = !!this._extIndexUint32;\r\n }\r\n this.supportOversizedViewport = true;\r\n this.supportDepthClamp = false;\r\n this.maxBindGroups = 4;\r\n this.maxTexCoordIndex = 8;\r\n }\r\n}\r\nexport class WebGLShaderCaps implements ShaderCaps {\r\n private readonly _extFragDepth: Nullable<EXT_frag_depth>;\r\n private readonly _extStandardDerivatives: Nullable<OES_standard_derivatives>;\r\n private readonly _extShaderTextureLod: Nullable<EXT_shader_texture_lod>;\r\n supportFragmentDepth: boolean;\r\n supportStandardDerivatives: boolean;\r\n supportShaderTextureLod: boolean;\r\n supportHighPrecisionFloat: boolean;\r\n maxUniformBufferSize: number;\r\n uniformBufferOffsetAlignment: number;\r\n maxStorageBufferSize: number;\r\n storageBufferOffsetAlignment: number;\r\n constructor(gl: WebGLContext) {\r\n this._extFragDepth = null;\r\n this._extStandardDerivatives = null;\r\n this._extShaderTextureLod = null;\r\n this.maxStorageBufferSize = 0;\r\n this.storageBufferOffsetAlignment = 0;\r\n if (isWebGL2(gl)) {\r\n this.supportFragmentDepth = true;\r\n this.supportStandardDerivatives = true;\r\n this.supportShaderTextureLod = true;\r\n this.supportHighPrecisionFloat = true;\r\n this.maxUniformBufferSize = gl.getParameter(gl.MAX_UNIFORM_BLOCK_SIZE) || 16384;\r\n this.uniformBufferOffsetAlignment = gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT) || 256;\r\n } else {\r\n this._extFragDepth = gl.getExtension('EXT_frag_depth');\r\n this.supportFragmentDepth = !!this._extFragDepth;\r\n this._extStandardDerivatives = gl.getExtension('OES_standard_derivatives');\r\n this.supportStandardDerivatives = !!this._extStandardDerivatives;\r\n this._extShaderTextureLod = gl.getExtension('EXT_shader_texture_lod');\r\n this.supportShaderTextureLod = !!this._extShaderTextureLod;\r\n this.supportHighPrecisionFloat =\r\n gl.getShaderPrecisionFormat &&\r\n !!gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT)?.precision &&\r\n !!gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT)?.precision;\r\n this.maxUniformBufferSize = 0;\r\n this.uniformBufferOffsetAlignment = 1;\r\n }\r\n }\r\n}\r\nexport class WebGLTextureCaps implements TextureCaps {\r\n private readonly _isWebGL2: boolean;\r\n private readonly _extS3TC: Nullable<WEBGL_compressed_texture_s3tc>;\r\n private readonly _extS3TCSRGB: Nullable<WEBGL_compressed_texture_s3tc_srgb>;\r\n private readonly _extBPTC: Nullable<EXT_texture_compression_bptc>;\r\n private readonly _extRGTC: Nullable<EXT_texture_compression_rgtc>;\r\n private readonly _extASTC: Nullable<WEBGL_compressed_texture_astc>;\r\n private readonly _extTextureFilterAnisotropic: Nullable<EXT_texture_filter_anisotropic>;\r\n private readonly _extDepthTexture: Nullable<WEBGL_depth_texture>;\r\n private readonly _extSRGB: Nullable<EXT_sRGB>;\r\n private readonly _extTextureFloat: Nullable<OES_texture_float>;\r\n private readonly _extTextureFloatLinear: Nullable<OES_texture_float_linear>;\r\n private readonly _extTextureHalfFloat: Nullable<OES_texture_half_float>;\r\n private readonly _extTextureHalfFloatLinear: Nullable<OES_texture_half_float_linear>;\r\n private readonly _textureFormatInfos: Record<TextureFormat, TextureFormatInfoWebGL>;\r\n maxTextureSize: number;\r\n maxCubeTextureSize: number;\r\n npo2Mipmapping: boolean;\r\n npo2Repeating: boolean;\r\n supportS3TC: boolean;\r\n supportS3TCSRGB: boolean;\r\n supportBPTC: boolean;\r\n supportRGTC: boolean;\r\n supportASTC: boolean;\r\n supportDepthTexture: boolean;\r\n support3DTexture: boolean;\r\n supportSRGBTexture: boolean;\r\n supportFloatTexture: boolean;\r\n supportLinearFloatTexture: boolean;\r\n supportHalfFloatTexture: boolean;\r\n supportLinearHalfFloatTexture: boolean;\r\n supportAnisotropicFiltering: boolean;\r\n supportFloatColorBuffer: boolean;\r\n supportHalfFloatColorBuffer: boolean;\r\n supportFloatBlending: boolean;\r\n constructor(gl: WebGLContext) {\r\n this._isWebGL2 = isWebGL2(gl);\r\n this._extTextureFilterAnisotropic =\r\n gl.getExtension('EXT_texture_filter_anisotropic') ||\r\n gl.getExtension('MOZ_EXT_texture_filter_anisotropic') ||\r\n gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\r\n this.supportAnisotropicFiltering = !!this._extTextureFilterAnisotropic;\r\n if (this._isWebGL2) {\r\n this._extDepthTexture = null;\r\n this.supportDepthTexture = true;\r\n } else {\r\n this._extDepthTexture = gl.getExtension('WEBGL_depth_texture');\r\n this.supportDepthTexture = !!this._extDepthTexture;\r\n }\r\n this.support3DTexture = this._isWebGL2;\r\n this._extSRGB = this._isWebGL2 ? null : gl.getExtension('EXT_sRGB');\r\n this.supportSRGBTexture = this._isWebGL2 || !!this._extSRGB;\r\n if (this._isWebGL2) {\r\n this._extTextureFloat = null;\r\n this.supportFloatTexture = true;\r\n } else {\r\n this._extTextureFloat = gl.getExtension('OES_texture_float');\r\n this.supportFloatTexture = !!this._extTextureFloat;\r\n }\r\n this._extTextureFloatLinear = gl.getExtension('OES_texture_float_linear');\r\n this.supportLinearFloatTexture = !!this._extTextureFloatLinear;\r\n if (this._isWebGL2) {\r\n this._extTextureHalfFloat = null;\r\n this.supportHalfFloatTexture = true;\r\n this._extTextureHalfFloatLinear = null;\r\n this.supportLinearHalfFloatTexture = true;\r\n } else {\r\n this._extTextureHalfFloat = gl.getExtension('OES_texture_half_float');\r\n this.supportHalfFloatTexture = !!this._extTextureHalfFloat;\r\n this._extTextureHalfFloatLinear = gl.getExtension('OES_texture_half_float_linear');\r\n this.supportLinearHalfFloatTexture = !!this._extTextureHalfFloatLinear;\r\n }\r\n\r\n if (this._isWebGL2) {\r\n if (gl.getExtension('EXT_color_buffer_float')) {\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatColorBuffer = true;\r\n } else if (gl.getExtension('EXT_color_buffer_half_float')) {\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatColorBuffer = false;\r\n } else {\r\n this.supportHalfFloatColorBuffer = false;\r\n this.supportFloatColorBuffer = false;\r\n }\r\n } else {\r\n this.supportFloatColorBuffer = !!gl.getExtension('WEBGL_color_buffer_float');\r\n this.supportHalfFloatColorBuffer = !!gl.getExtension('EXT_color_buffer_half_float');\r\n }\r\n this.supportFloatBlending = this.supportFloatColorBuffer && !!gl.getExtension('EXT_float_blend');\r\n\r\n this._extS3TC =\r\n gl.getExtension('WEBGL_compressed_texture_s3tc') ||\r\n gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||\r\n gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');\r\n this.supportS3TC = !!this._extS3TC;\r\n this._extS3TCSRGB = gl.getExtension('WEBGL_compressed_texture_s3tc_srgb');\r\n this.supportS3TCSRGB = !!this._extS3TCSRGB;\r\n this._extBPTC = gl.getExtension('EXT_texture_compression_bptc');\r\n this.supportBPTC = !!this._extBPTC;\r\n this._extRGTC = gl.getExtension('EXT_texture_compression_rgtc');\r\n this.supportRGTC = !!this._extRGTC;\r\n this._extASTC = gl.getExtension('WEBGL_compressed_texture_astc');\r\n this.supportASTC = !!this._extASTC;\r\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n this.maxCubeTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\r\n if (this._isWebGL2) {\r\n this.npo2Mipmapping = true;\r\n this.npo2Repeating = true;\r\n } else {\r\n this.npo2Mipmapping = false;\r\n this.npo2Repeating = false;\r\n }\r\n this._textureFormatInfos = {\r\n rgba8unorm: {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: this._isWebGL2 ? (gl as WebGL2RenderingContext).RGBA8 : gl.RGBA,\r\n glType: [gl.UNSIGNED_BYTE, gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n }\r\n } as Record<TextureFormat, TextureFormatInfoWebGL>;\r\n if (this._extASTC) {\r\n for (const k of [\r\n '4x4',\r\n '5x4',\r\n '5x5',\r\n '6x5',\r\n '6x6',\r\n '8x5',\r\n '8x6',\r\n '8x8',\r\n '10x5',\r\n '10x6',\r\n '10x8',\r\n '10x10',\r\n '12x10',\r\n '12x12'\r\n ]) {\r\n const [w, h] = k.split('x').map((val) => Number(val));\r\n this._textureFormatInfos[`astc-${k}` as keyof typeof this._textureFormatInfos] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extASTC[\r\n `COMPRESSED_RGBA_ASTC_${k}_KHR` as keyof typeof this._extASTC\r\n ] as number,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n this._textureFormatInfos[`astc-${k}-srgb` as keyof typeof this._textureFormatInfos] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extASTC[\r\n `COMPRESSED_SRGB8_ALPHA8_ASTC_${k}_KHR` as keyof typeof this._extASTC\r\n ] as number,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n }\r\n }\r\n if (this._extS3TC) {\r\n this._textureFormatInfos['dxt1'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGBA_S3TC_DXT3_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TC.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extS3TCSRGB) {\r\n this._textureFormatInfos['dxt1-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_S3TC_DXT1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extS3TCSRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extRGTC) {\r\n this._textureFormatInfos['bc4'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_RED_RGTC1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc4-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_SIGNED_RED_RGTC1_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_RED_GREEN_RGTC2_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extRGTC.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this._extBPTC) {\r\n this._textureFormatInfos['bc6h'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc6h-signed'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7-srgb'] = {\r\n glFormat: gl.NONE,\r\n glInternalFormat: this._extBPTC.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT,\r\n glType: [gl.NONE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (isWebGL2(gl)) {\r\n this._textureFormatInfos['r8unorm'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8snorm'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16f'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32f'] = {\r\n glFormat: gl.RED,\r\n glInternalFormat: gl.R32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r8ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r16i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32ui'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r32i'] = {\r\n glFormat: gl.RED_INTEGER,\r\n glInternalFormat: gl.R32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg8unorm'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8snorm'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16f'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32f'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg8ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg16i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32ui'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg32i'] = {\r\n glFormat: gl.RG,\r\n glInternalFormat: gl.RG32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.SRGB8_ALPHA8,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8snorm'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA8_SNORM,\r\n glType: [gl.BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA16F,\r\n glType: [gl.HALF_FLOAT, gl.FLOAT],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA32F,\r\n glType: [gl.FLOAT],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba8ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA8UI,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA8I,\r\n glType: [gl.BYTE],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA16UI,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba16i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA16I,\r\n glType: [gl.SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32ui'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA32UI,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba32i'] = {\r\n glFormat: gl.RGBA_INTEGER,\r\n glInternalFormat: gl.RGBA32I,\r\n glType: [gl.INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rg11b10uf'] = {\r\n glFormat: gl.RGB,\r\n glInternalFormat: gl.R11F_G11F_B10F,\r\n glType: [gl.UNSIGNED_INT_10F_11F_11F_REV],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d16'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT16,\r\n glType: [gl.UNSIGNED_SHORT, gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT24,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32f'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT32F,\r\n glType: [gl.FLOAT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH24_STENCIL8,\r\n glType: [gl.UNSIGNED_INT_24_8],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32fs8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH32F_STENCIL8,\r\n glType: [gl.FLOAT_32_UNSIGNED_INT_24_8_REV],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n } else {\r\n if (this.supportFloatTexture) {\r\n this._textureFormatInfos['rgba32f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA,\r\n glType: [gl.FLOAT, gl.UNSIGNED_BYTE, gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1],\r\n filterable: this.supportLinearFloatTexture,\r\n renderable: this.supportFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n }\r\n if (this.supportHalfFloatTexture) {\r\n this._textureFormatInfos['rgba16f'] = {\r\n glFormat: gl.RGBA,\r\n glInternalFormat: gl.RGBA,\r\n glType: [\r\n WebGLEnum.HALF_FLOAT,\r\n gl.UNSIGNED_BYTE,\r\n gl.UNSIGNED_SHORT_4_4_4_4,\r\n gl.UNSIGNED_SHORT_5_5_5_1\r\n ],\r\n filterable: this.supportLinearHalfFloatTexture,\r\n renderable: this.supportHalfFloatColorBuffer,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n }\r\n if (this.supportSRGBTexture) {\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n glFormat: WebGLEnum.SRGB_ALPHA,\r\n glInternalFormat: WebGLEnum.SRGB_ALPHA,\r\n glType: [gl.UNSIGNED_BYTE],\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n }\r\n if (this.supportDepthTexture) {\r\n this._textureFormatInfos['d16'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT,\r\n glType: [gl.UNSIGNED_SHORT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n glFormat: gl.DEPTH_COMPONENT,\r\n glInternalFormat: gl.DEPTH_COMPONENT,\r\n glType: [gl.UNSIGNED_INT],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n glFormat: gl.DEPTH_STENCIL,\r\n glInternalFormat: gl.DEPTH_STENCIL,\r\n glType: [WebGLEnum.UNSIGNED_INT_24_8],\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n }\r\n }\r\n }\r\n calcMemoryUsage(format: TextureFormat, type: number, numPixels: number) {\r\n switch (format) {\r\n case 'd16':\r\n case 'd24':\r\n case 'd24s8':\r\n case 'd32f':\r\n switch (type) {\r\n case WebGLEnum.UNSIGNED_SHORT:\r\n return numPixels * 2;\r\n default:\r\n return numPixels * 4;\r\n }\r\n case 'd32fs8':\r\n return numPixels * 8;\r\n case 'dxt1':\r\n case 'dxt1-srgb':\r\n return numPixels / 2;\r\n case 'dxt3':\r\n case 'dxt3-srgb':\r\n case 'dxt5':\r\n case 'dxt5-srgb':\r\n return numPixels;\r\n case 'r16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 2;\r\n default:\r\n return numPixels * 4;\r\n }\r\n case 'r16i':\r\n case 'r16ui':\r\n return numPixels * 2;\r\n case 'r32f':\r\n case 'r32i':\r\n case 'r32ui':\r\n return numPixels * 4;\r\n case 'r8unorm':\r\n case 'r8snorm':\r\n case 'r8i':\r\n case 'r8ui':\r\n return numPixels;\r\n case 'rg16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 4;\r\n default:\r\n return numPixels * 8;\r\n }\r\n case 'rg16i':\r\n case 'rg16ui':\r\n return numPixels * 4;\r\n case 'rg32f':\r\n case 'rg32i':\r\n case 'rg32ui':\r\n return numPixels * 8;\r\n case 'rg8unorm':\r\n case 'rg8snorm':\r\n case 'rg8i':\r\n case 'rg8ui':\r\n return numPixels * 2;\r\n case 'rgba16f':\r\n switch (type) {\r\n case WebGLEnum.HALF_FLOAT:\r\n return numPixels * 8;\r\n default:\r\n return numPixels * 16;\r\n }\r\n case 'rgba16i':\r\n case 'rgba16ui':\r\n return numPixels * 8;\r\n case 'rgba32f':\r\n case 'rgba32i':\r\n case 'rgba32ui':\r\n return numPixels * 16;\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n case 'rgba8snorm':\r\n case 'rgba8i':\r\n case 'rgba8ui':\r\n return numPixels * 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfoWebGL> {\r\n return this._textureFormatInfos[format];\r\n }\r\n}\r\n","import { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { StructuredBuffer, StructuredValue, PBTypeInfo, PBStructTypeInfo } from '@zephyr3d/device';\r\nimport { StructuredBufferData, GPUResourceUsageFlags, PBPrimitiveType } from '@zephyr3d/device';\r\nimport type { Immutable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\n\r\nexport class WebGLStructuredBuffer extends WebGLGPUBuffer implements StructuredBuffer {\r\n private _structure: PBStructTypeInfo;\r\n private _data: StructuredBufferData;\r\n constructor(\r\n device: WebGLDevice,\r\n structure: Immutable<PBStructTypeInfo>,\r\n usage: number,\r\n source?: TypedArray\r\n ) {\r\n if (!structure?.isStructType()) {\r\n throw new Error('invalid structure type');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('structured buffer must not have Index usage flag');\r\n }\r\n if (\r\n usage &\r\n (GPUResourceUsageFlags.BF_READ |\r\n GPUResourceUsageFlags.BF_WRITE |\r\n GPUResourceUsageFlags.BF_PACK_PIXEL |\r\n GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n throw new Error('structured buffer must not have Read or Write usage flags');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n if (structure.structMembers.length !== 1 || !structure.structMembers[0].type.isArrayType()) {\r\n throw new Error('structured buffer for vertex usage must have only one array member');\r\n }\r\n if (!WebGLStructuredBuffer.isValidArrayElementType(structure.structMembers[0].type.elementType)) {\r\n throw new Error('invalid vertex data type when creating vertex buffer');\r\n }\r\n }\r\n const layout = structure.toBufferLayout(0, structure.layout);\r\n if (source && layout.byteSize !== source.byteLength) {\r\n throw new Error(\r\n `create structured buffer failed: invalid source size: ${source.byteLength}, should be ${layout.byteSize}`\r\n );\r\n }\r\n const useSystemMemory = !device.isWebGL2 && (usage & GPUResourceUsageFlags.BF_UNIFORM) !== 0;\r\n super(device, usage, source || layout.byteSize, useSystemMemory);\r\n this._data = new StructuredBufferData(layout, useSystemMemory ? this.systemMemoryBuffer : this);\r\n this._structure = structure;\r\n }\r\n set(name: string, value: StructuredValue) {\r\n this._data.set(name, value);\r\n }\r\n get structure(): Immutable<PBStructTypeInfo> {\r\n return this._structure;\r\n }\r\n set structure(st: PBStructTypeInfo) {\r\n if (st && !st.isCompatibleType(this._structure)) {\r\n const layout = st.toBufferLayout(0, st.layout);\r\n if (layout.byteSize > this.byteLength) {\r\n throw new Error(`set structure type failed: new structure type is too large: ${layout.byteSize}`);\r\n }\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = st;\r\n }\r\n }\r\n getUniformData() {\r\n return this._data;\r\n }\r\n private static isValidArrayElementType(type: PBTypeInfo) {\r\n if (type.isPrimitiveType()) {\r\n return type.scalarType !== PBPrimitiveType.BOOL && !type.isMatrixType();\r\n } else if (type.isStructType()) {\r\n for (const member of type.structMembers) {\r\n if (\r\n !member.type.isPrimitiveType() ||\r\n member.type.scalarType === PBPrimitiveType.BOOL ||\r\n member.type.isMatrixType()\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import type {\r\n StructuredValue,\r\n PBStructTypeInfo,\r\n BindGroupLayout,\r\n BaseTexture,\r\n TextureSampler,\r\n BindGroup,\r\n BindGroupLayoutEntry,\r\n GPUDataBuffer\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGLStructuredBuffer } from './structuredbuffer_webgl';\r\nimport { WebGLGPUObject } from './gpuobject_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLGPUProgram } from './gpuprogram_webgl';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { Immutable, Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\n\r\nexport class WebGLBindGroup extends WebGLGPUObject<unknown> implements BindGroup {\r\n private readonly _layout: Immutable<BindGroupLayout>;\r\n private _dynamicOffsets: Nullable<number[]>;\r\n private _resources: Record<string, WebGLGPUBuffer | [WebGLBaseTexture, WebGLTextureSampler]>;\r\n private _createdBuffers: WebGLGPUBuffer[];\r\n constructor(device: WebGLDevice, layout: Immutable<BindGroupLayout>) {\r\n super(device);\r\n this._device = device;\r\n this._layout = layout;\r\n this._dynamicOffsets = null;\r\n this._resources = {};\r\n this._object = {};\r\n this._createdBuffers = [];\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.buffer.hasDynamicOffset) {\r\n if (!this._dynamicOffsets) {\r\n this._dynamicOffsets = [];\r\n }\r\n this._dynamicOffsets[entry.buffer.dynamicOffsetIndex] = 0;\r\n }\r\n }\r\n }\r\n getGPUId() {\r\n return String(this._uid);\r\n }\r\n getLayout(): Immutable<BindGroupLayout> {\r\n return this._layout;\r\n }\r\n getBuffer(name: string, nocreate = true) {\r\n return this._getBuffer(name, nocreate);\r\n }\r\n getDynamicOffsets(): Nullable<Immutable<number[]>> {\r\n return this._dynamicOffsets;\r\n }\r\n setBuffer(name: string, buffer: GPUDataBuffer, offset?: number, _bindOffset?: number, _bindSize?: number) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.name === bindName) {\r\n if (!entry.buffer) {\r\n console.error(`setBuffer() failed: resource '${name}' is not buffer`);\r\n } else {\r\n if (buffer && !(buffer.usage & GPUResourceUsageFlags.BF_UNIFORM)) {\r\n console.error(\r\n `setBuffer() failed: buffer resource '${name}' must be type '${entry.buffer.type}'`\r\n );\r\n } else if (buffer !== this._resources[entry.name]) {\r\n this._resources[entry.name] = buffer as WebGLGPUBuffer;\r\n }\r\n if (entry.buffer.hasDynamicOffset) {\r\n this._dynamicOffsets![entry.buffer.dynamicOffsetIndex] = offset ?? 0;\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n console.error(`setBuffer() failed: no buffer resource named '${name}'`);\r\n }\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setRawData(mappedName, byteOffset, data, srcPos, srcLength);\r\n } else {\r\n const buffer = this._getBuffer(name, false);\r\n if (buffer) {\r\n buffer.bufferSubData(byteOffset, data, srcPos, srcLength);\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setValue(name: string, value: StructuredValue) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setValue(mappedName, { [name]: value });\r\n } else {\r\n const buffer = this._getBuffer(name, false);\r\n if (buffer) {\r\n if (!(buffer instanceof WebGLStructuredBuffer)) {\r\n throw new Error(`BindGroup.setValue() failed: '${name}' is not structured buffer`);\r\n }\r\n if (typeof value === 'number') {\r\n throw new Error(`BindGroup.setValue() failed: cannot set ${value} to '${name}'`);\r\n }\r\n if ('BYTES_PER_ELEMENT' in value) {\r\n buffer.bufferSubData(0, value as TypedArray);\r\n } else {\r\n for (const k in value) {\r\n buffer.set(k, value[k]);\r\n }\r\n }\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setTextureView(\r\n _name: string,\r\n _value: BaseTexture,\r\n _level?: number,\r\n _face?: number,\r\n _mipCount?: number,\r\n _sampler?: Nullable<TextureSampler>\r\n ) {\r\n throw new Error('setTextureView() not supported for webgl device');\r\n }\r\n getTexture(name: string): Nullable<BaseTexture> {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n return (this._resources[name] as [WebGLBaseTexture, WebGLTextureSampler])?.[0] || null;\r\n } else {\r\n throw new Error(`getTexture() failed:${name} is not a texture`);\r\n }\r\n }\r\n setTexture(name: string, texture: BaseTexture, sampler?: Nullable<TextureSampler>) {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n this._resources[name] = [\r\n texture as unknown as WebGLBaseTexture,\r\n (sampler ||\r\n texture.getDefaultSampler(!!entry.texture?.autoBindSamplerComparison)) as WebGLTextureSampler\r\n ];\r\n } else {\r\n console.error(`setTexture() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n setSampler(_name: string, _value: TextureSampler) {\r\n // no sampler uniform support for webgl\r\n }\r\n apply(program: WebGLGPUProgram, offsets?: Nullable<Iterable<number>>) {\r\n const webgl2 = this._device.isWebGL2;\r\n const dynamicOffsets = offsets ?? this.getDynamicOffsets();\r\n for (let i = 0; i < this._layout.entries.length; i++) {\r\n const entry = this._layout.entries[i];\r\n const res = this._resources[entry.name];\r\n if (res instanceof WebGLGPUBuffer) {\r\n if (webgl2) {\r\n if (entry.buffer!.hasDynamicOffset) {\r\n program.setBlock(\r\n (entry.type as PBStructTypeInfo).structName!,\r\n res,\r\n (dynamicOffsets! as number[])[entry.buffer!.dynamicOffsetIndex]\r\n );\r\n } else {\r\n program.setBlock((entry.type as PBStructTypeInfo).structName!, res, 0);\r\n }\r\n } else if (res instanceof WebGLStructuredBuffer) {\r\n program.setUniform(entry.name, res.getUniformData().uniforms);\r\n }\r\n } else if (Array.isArray(res)) {\r\n if (res[0].isTextureVideo()) {\r\n res[0].updateVideoFrame();\r\n }\r\n // res[0].sampler = res[1];\r\n program.setUniform(entry.name, res);\r\n }\r\n }\r\n }\r\n destroy() {\r\n this._resources = {};\r\n this._object = null;\r\n for (const buffer of this._createdBuffers) {\r\n buffer.dispose();\r\n }\r\n this._createdBuffers = [];\r\n }\r\n restore() {\r\n this._object = {};\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return true;\r\n }\r\n private _getBuffer(name: string, nocreate = false) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.name === bindName) {\r\n let buffer = this._resources[entry.name];\r\n if (!buffer && !nocreate) {\r\n buffer = this._device.createStructuredBuffer(entry.type as PBStructTypeInfo, {\r\n usage: 'uniform'\r\n }) as WebGLStructuredBuffer;\r\n this._resources[entry.name] = buffer;\r\n this._createdBuffers.push(buffer);\r\n }\r\n return buffer as GPUDataBuffer;\r\n }\r\n }\r\n return null;\r\n }\r\n private _findTextureLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if ((entry.texture || entry.storageTexture || entry.externalTexture) && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport type { PBStructTypeInfo, GPUProgram, BindGroupLayout, ShaderKind } from '@zephyr3d/device';\r\nimport { semanticList } from '@zephyr3d/device';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLGPUBuffer } from './buffer_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport type { Immutable, Nullable, TypedArrayConstructor } from '@zephyr3d/base';\r\n\r\ntype UniformBlockArray = Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float32Array<ArrayBuffer>;\r\nexport interface AttributeSetter {\r\n (value: WebGLGPUBuffer | number | Iterable<number>, offset?: number, stride?: number): void;\r\n location: number;\r\n}\r\n\r\nexport type IUniformValue = number | Iterable<number> | [WebGLBaseTexture, WebGLTextureSampler];\r\nexport type UniformSetter = (value: IUniformValue) => unknown;\r\n\r\ninterface ProgramUniformInfo {\r\n index: number;\r\n name: string;\r\n type: number;\r\n size: number;\r\n blockIndex: number;\r\n offset: number;\r\n isArray: boolean;\r\n viewCtor: TypedArrayConstructor<UniformBlockArray>;\r\n viewElementSize: number;\r\n view: Nullable<UniformBlockArray>;\r\n location: Nullable<WebGLUniformLocation>;\r\n}\r\n\r\ninterface ProgramBlockInfo {\r\n index: number;\r\n used: boolean;\r\n size: number;\r\n uniformIndices: Uint32Array<ArrayBuffer>;\r\n}\r\n\r\nexport class WebGLGPUProgram extends WebGLGPUObject<WebGLProgram> implements GPUProgram<WebGLProgram> {\r\n private readonly _vs: string;\r\n private readonly _fs: string;\r\n private _unitCounter: number;\r\n private _uniformSetters: Record<string, UniformSetter>;\r\n private _uniformInfo: Nullable<ProgramUniformInfo>[];\r\n private _blockInfo: Record<string, ProgramBlockInfo>;\r\n private readonly _bindGroupLayouts: BindGroupLayout[];\r\n private readonly _vertexAttributes: number[];\r\n private _error: Nullable<string>;\r\n private _vertexShader: Nullable<WebGLShader>;\r\n private _fragmentShader: Nullable<WebGLShader>;\r\n constructor(\r\n device: WebGLDevice,\r\n vertexShader: string,\r\n fragmentShader: string,\r\n bindGroupLayouts: BindGroupLayout[],\r\n vertexAttributes: number[]\r\n ) {\r\n super(device);\r\n this._object = this._device.context.createProgram();\r\n this._unitCounter = 0;\r\n this._uniformSetters = {};\r\n this._uniformInfo = [];\r\n this._blockInfo = {};\r\n this._error = '';\r\n this._vertexShader = null;\r\n this._fragmentShader = null;\r\n this._vs = vertexShader;\r\n this._fs = fragmentShader;\r\n this._bindGroupLayouts = [...bindGroupLayouts];\r\n this._vertexAttributes = [...vertexAttributes];\r\n this.load();\r\n }\r\n get type() {\r\n return 'render' as const;\r\n }\r\n getCompileError() {\r\n return this._error;\r\n }\r\n getShaderSource(kind: ShaderKind) {\r\n switch (kind) {\r\n case 'vertex':\r\n return this._vs;\r\n case 'fragment':\r\n return this._fs;\r\n default:\r\n return null;\r\n }\r\n }\r\n getBindingInfo(name: string) {\r\n for (let group = 0; group < this._bindGroupLayouts.length; group++) {\r\n const layout = this._bindGroupLayouts[group];\r\n const bindName = layout.nameMap?.[name] ?? name;\r\n for (let binding = 0; binding < layout.entries.length; binding++) {\r\n const bindingPoint = layout.entries[binding];\r\n if (bindingPoint.name === bindName) {\r\n return {\r\n group: group,\r\n binding: binding,\r\n type: bindingPoint.type\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n get bindGroupLayouts(): Immutable<BindGroupLayout[]> {\r\n return this._bindGroupLayouts;\r\n }\r\n get vertexAttributes(): Immutable<number[]> {\r\n return this._vertexAttributes;\r\n }\r\n setUniform(name: string, value: IUniformValue | Record<string, IUniformValue> | IUniformValue[]) {\r\n const setter = this._uniformSetters[name];\r\n if (setter) {\r\n setter(value as IUniformValue);\r\n } else {\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto === Object.getPrototypeOf({})) {\r\n this._setUniformStruct(name, value as Record<string, IUniformValue>);\r\n } else if (proto == Object.getPrototypeOf([])) {\r\n this._setUniformArray(name, value as IUniformValue[]);\r\n }\r\n }\r\n }\r\n setBlock(name: string, value: WebGLGPUBuffer, offset: number) {\r\n const info = this._blockInfo[name];\r\n if (info) {\r\n this._device.bindUniformBuffer(info.index, value, offset);\r\n /*\r\n if (offset) {\r\n (this._device.context as WebGL2RenderingContext).bindBufferRange(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n info.index,\r\n value.object,\r\n offset,\r\n value.byteLength - offset\r\n );\r\n } else {\r\n (this._device.context as WebGL2RenderingContext).bindBufferBase(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n info.index,\r\n value.object\r\n );\r\n }\r\n */\r\n } else {\r\n console.error(`Block not found: ${name}`);\r\n }\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._device.context.deleteProgram(this._object);\r\n this._object = null;\r\n this._unitCounter = 0;\r\n this._uniformSetters = {};\r\n this._uniformInfo = [];\r\n this._blockInfo = {};\r\n this._error = '';\r\n this._vertexShader = null;\r\n this._fragmentShader = null;\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n isProgram(): this is GPUProgram {\r\n return true;\r\n }\r\n use() {\r\n if (this !== this._device.context._currentProgram) {\r\n if (!this.checkLoad()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n createUniformBuffer(uniform: string) {\r\n const type = this.getBindingInfo(uniform)?.type as PBStructTypeInfo;\r\n return type ? this.device.createStructuredBuffer(type, { usage: 'uniform' }) : null;\r\n }\r\n private _setUniformStruct(name: string, value: Record<string, IUniformValue>) {\r\n for (const k in value) {\r\n this.setUniform(`${name}.${k}`, value[k]);\r\n }\r\n }\r\n private _setUniformArray(name: string, value: IUniformValue[]) {\r\n for (let i = 0; i < value.length; i++) {\r\n this.setUniform(`${name}[${i}]`, value[i]);\r\n }\r\n }\r\n private load() {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n const gl = this._device.context;\r\n this._error = null;\r\n this._uniformSetters = {};\r\n if (!this._object) {\r\n this._object = this._device.context.createProgram();\r\n }\r\n this._vertexShader = gl.createShader(WebGLEnum.VERTEX_SHADER);\r\n gl.attachShader(this._object, this._vertexShader!);\r\n gl.shaderSource(this._vertexShader!, this._vs);\r\n gl.compileShader(this._vertexShader!);\r\n this._fragmentShader = gl.createShader(WebGLEnum.FRAGMENT_SHADER);\r\n gl.attachShader(this._object, this._fragmentShader!);\r\n gl.shaderSource(this._fragmentShader!, this._fs);\r\n gl.compileShader(this._fragmentShader!);\r\n for (let loc = 0; loc < semanticList.length; loc++) {\r\n gl.bindAttribLocation(this._object, loc, semanticList[loc]);\r\n }\r\n gl.linkProgram(this._object);\r\n }\r\n private checkLoad() {\r\n if (!this._object) {\r\n return false;\r\n }\r\n if (this._vertexShader) {\r\n const gl = this._device.context;\r\n if (!this._device.isContextLost()) {\r\n if (!gl.getProgramParameter(this._object, WebGLEnum.LINK_STATUS)) {\r\n if (!gl.getShaderParameter(this._vertexShader, WebGLEnum.COMPILE_STATUS)) {\r\n this._error = gl.getShaderInfoLog(this._vertexShader);\r\n console.error(new Error(`Compile shader failed: ${this._error}`));\r\n } else if (!gl.getShaderParameter(this._fragmentShader!, WebGLEnum.COMPILE_STATUS)) {\r\n this._error = gl.getShaderInfoLog(this._fragmentShader!);\r\n console.error(new Error(`Compile shader failed: ${this._error}`));\r\n } else {\r\n this._error = gl.getProgramInfoLog(this._object);\r\n console.error(new Error(`Load program failed: \\n${this._error}`));\r\n }\r\n }\r\n }\r\n gl.deleteShader(this._vertexShader);\r\n this._vertexShader = null;\r\n gl.deleteShader(this._fragmentShader);\r\n this._fragmentShader = null;\r\n if (this._error) {\r\n gl.deleteProgram(this._object);\r\n this._object = null;\r\n return false;\r\n }\r\n this._device.context._currentProgram = this;\r\n this._device.context.useProgram(this._object);\r\n this._uniformSetters = this.createUniformSetters();\r\n } else {\r\n this._device.context._currentProgram = this;\r\n this._device.context.useProgram(this._object);\r\n }\r\n return true;\r\n }\r\n private createUniformSetter(info: ProgramUniformInfo): Nullable<UniformSetter> {\r\n const loc = info.location!;\r\n const isArray = info.isArray;\r\n const gl = this._device.context;\r\n switch (info.type) {\r\n case WebGLEnum.FLOAT:\r\n return this.getUniformSetterfv(loc);\r\n case WebGLEnum.FLOAT_VEC2:\r\n return this.getUniformSetter2fv(loc);\r\n case WebGLEnum.FLOAT_VEC3:\r\n return this.getUniformSetter3fv(loc);\r\n case WebGLEnum.FLOAT_VEC4:\r\n return this.getUniformSetter4fv(loc);\r\n case WebGLEnum.INT:\r\n return this.getUniformSetteriv(loc);\r\n case WebGLEnum.INT_VEC2:\r\n return this.getUniformSetter2iv(loc);\r\n case WebGLEnum.INT_VEC3:\r\n return this.getUniformSetter3iv(loc);\r\n case WebGLEnum.INT_VEC4:\r\n return this.getUniformSetter4iv(loc);\r\n case WebGLEnum.UNSIGNED_INT:\r\n return this.getUniformSetteruiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC2:\r\n return this.getUniformSetter2uiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC3:\r\n return this.getUniformSetter3uiv(loc);\r\n case WebGLEnum.UNSIGNED_INT_VEC4:\r\n return this.getUniformSetter4uiv(loc);\r\n case WebGLEnum.BOOL:\r\n return this.getUniformSetteriv(loc);\r\n case WebGLEnum.BOOL_VEC2:\r\n return this.getUniformSetter2iv(loc);\r\n case WebGLEnum.BOOL_VEC3:\r\n return this.getUniformSetter3iv(loc);\r\n case WebGLEnum.BOOL_VEC4:\r\n return this.getUniformSetter4iv(loc);\r\n case WebGLEnum.FLOAT_MAT2:\r\n return this.getUniformSetterMatrix2(loc);\r\n case WebGLEnum.FLOAT_MAT2x3:\r\n return this.getUniformSetterMatrix23(loc);\r\n case WebGLEnum.FLOAT_MAT2x4:\r\n return this.getUniformSetterMatrix24(loc);\r\n case WebGLEnum.FLOAT_MAT3:\r\n return this.getUniformSetterMatrix3(loc);\r\n case WebGLEnum.FLOAT_MAT3x2:\r\n return this.getUniformSetterMatrix32(loc);\r\n case WebGLEnum.FLOAT_MAT3x4:\r\n return this.getUniformSetterMatrix34(loc);\r\n case WebGLEnum.FLOAT_MAT4:\r\n return this.getUniformSetterMatrix4(loc);\r\n case WebGLEnum.FLOAT_MAT4x2:\r\n return this.getUniformSetterMatrix42(loc);\r\n case WebGLEnum.FLOAT_MAT4x3:\r\n return this.getUniformSetterMatrix43(loc);\r\n case WebGLEnum.SAMPLER_2D:\r\n case WebGLEnum.SAMPLER_2D_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_2D:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_2D: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_2D, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_2D_ARRAY:\r\n case WebGLEnum.SAMPLER_2D_ARRAY_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_2D_ARRAY:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_2D_ARRAY: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_2D_ARRAY, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_CUBE:\r\n case WebGLEnum.SAMPLER_CUBE_SHADOW:\r\n case WebGLEnum.INT_SAMPLER_CUBE:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_CUBE: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_CUBE_MAP, unit);\r\n }\r\n /* falls through */\r\n }\r\n case WebGLEnum.SAMPLER_3D:\r\n case WebGLEnum.INT_SAMPLER_3D:\r\n case WebGLEnum.UNSIGNED_INT_SAMPLER_3D: {\r\n const unit = this._unitCounter;\r\n this._unitCounter += info.size;\r\n if (!isArray) {\r\n gl.uniform1i(loc, unit);\r\n return this.getSamplerSetter(loc, WebGLEnum.TEXTURE_3D, unit);\r\n }\r\n }\r\n }\r\n console.error(`Error: unsupported uniform type: ${info.name}`);\r\n return null;\r\n }\r\n private createUniformSetters() {\r\n const uniformSetters: Record<string, UniformSetter> = {};\r\n const gl = this._device.context;\r\n const numUniforms = gl.getProgramParameter(this._object!, WebGLEnum.ACTIVE_UNIFORMS) as number;\r\n\r\n this._uniformInfo = [];\r\n for (let index = 0; index < numUniforms; index++) {\r\n const info = gl.getActiveUniform(this._object!, index)!;\r\n let name = info.name;\r\n let isArray = false;\r\n if (name.startsWith('gl_') || name.startsWith('webgl_')) {\r\n this._uniformInfo.push(null);\r\n } else {\r\n if (name.substr(-3) === '[0]') {\r\n // is array\r\n name = name.substr(0, name.length - 3);\r\n isArray = true;\r\n }\r\n const size = info.size;\r\n const type = info.type;\r\n const blockIndex = -1;\r\n const offset = 0;\r\n const location = gl.getUniformLocation(this._object!, info.name);\r\n const view = null;\r\n const { ctor: viewCtor, elementSize: viewElementSize } = this.getTypedArrayInfo(info.type);\r\n const uniformInfo = {\r\n index,\r\n name,\r\n size,\r\n type,\r\n blockIndex,\r\n offset,\r\n isArray,\r\n location,\r\n view,\r\n viewCtor,\r\n viewElementSize\r\n };\r\n this._uniformInfo.push(uniformInfo);\r\n if (location) {\r\n uniformSetters[name] = this.createUniformSetter(uniformInfo)!;\r\n }\r\n }\r\n }\r\n if (isWebGL2(gl)) {\r\n this._blockInfo = {};\r\n const numBlocks = gl.getProgramParameter(this._object!, WebGLEnum.ACTIVE_UNIFORM_BLOCKS) as number;\r\n for (let i = 0; i < numBlocks; i++) {\r\n const name = gl.getActiveUniformBlockName(this._object!, i)!;\r\n const index = gl.getUniformBlockIndex(this._object!, name);\r\n const usedInVS = !!gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\r\n );\r\n const usedInFS = !!gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\r\n );\r\n const used = usedInVS || usedInFS;\r\n const size = gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_DATA_SIZE\r\n ) as number;\r\n const uniformIndices = gl.getActiveUniformBlockParameter(\r\n this._object!,\r\n i,\r\n WebGLEnum.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\r\n ) as Uint32Array<ArrayBuffer>;\r\n this._blockInfo[name] = { index, used, size, uniformIndices };\r\n gl.uniformBlockBinding(this._object!, index, index);\r\n }\r\n }\r\n return uniformSetters;\r\n }\r\n private getUniformSetterfv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform1fv(location, value);\r\n };\r\n }\r\n private getUniformSetter2fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform2fv(location, value);\r\n };\r\n }\r\n private getUniformSetter3fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform3fv(location, value);\r\n };\r\n }\r\n private getUniformSetter4fv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform4fv(location, value);\r\n };\r\n }\r\n private getUniformSetteriv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform1iv(location, value);\r\n };\r\n }\r\n private getUniformSetter2iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform2iv(location, value);\r\n };\r\n }\r\n private getUniformSetter3iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform3iv(location, value);\r\n };\r\n }\r\n private getUniformSetter4iv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniform4iv(location, value);\r\n };\r\n }\r\n private getUniformSetteruiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform1uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter2uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform2uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter3uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform3uiv(location, value);\r\n };\r\n }\r\n private getUniformSetter4uiv(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniform4uiv(location, value);\r\n };\r\n }\r\n private getUniformSetterMatrix2(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniformMatrix2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix23(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix2x3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix24(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix2x4fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix32(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3x2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix3(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix34(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix3x4fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix42(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix4x2fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix43(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n (this._device.context as WebGL2RenderingContext).uniformMatrix4x3fv(location, false, value);\r\n };\r\n }\r\n private getUniformSetterMatrix4(location: WebGLUniformLocation) {\r\n return (value: any) => {\r\n this._device.context.uniformMatrix4fv(location, false, value);\r\n };\r\n }\r\n private getSamplerSetter(location: WebGLUniformLocation, target: number, unit: number) {\r\n return (texture: any) => {\r\n this._device.bindTexture(target, unit, texture[0], texture[1]);\r\n };\r\n /*\r\n const gl = this._device.context;\r\n return isWebGL2(gl)\r\n ? (texture: [WebGLBaseTexture, WebGLTextureSampler]) => {\r\n const tex = texture?.[0].object ?? null;\r\n const sampler = texture?.[1].object ?? null;\r\n //gl.uniform1i(location, unit);\r\n gl.activeTexture(this._device.context.TEXTURE0 + unit);\r\n gl.bindTexture(target, tex);\r\n gl.bindSampler(unit, sampler);\r\n }\r\n : (texture: [WebGLBaseTexture, WebGLTextureSampler]) => {\r\n const tex = texture?.[0] ?? null;\r\n const sampler = texture?.[1] ?? null;\r\n //gl.uniform1i(location, unit);\r\n gl.activeTexture(this._device.context.TEXTURE0 + unit);\r\n gl.bindTexture(target, tex?.object ?? null);\r\n if (tex && sampler && this._device.getCurrentSamplerForTexture(tex) !== sampler) {\r\n const fallback = tex.isWebGL1Fallback;\r\n this._device.setCurrentSamplerForTexture(tex, sampler);\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_WRAP_S,\r\n textureWrappingMap[false && fallback ? 'clamp' : sampler.addressModeU]\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_WRAP_T,\r\n textureWrappingMap[false && fallback ? 'clamp' : sampler.addressModeV]\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(sampler.magFilter)\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(sampler.minFilter, tex.isWebGL1Fallback ? 'none' : sampler.mipFilter)\r\n );\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, sampler.maxAnisotropy);\r\n }\r\n }\r\n };\r\n */\r\n }\r\n private getTypedArrayInfo(type: number) {\r\n let ctor: Nullable<TypedArrayConstructor<UniformBlockArray>> = null;\r\n let elementSize = 0;\r\n switch (type) {\r\n case WebGLEnum.INT:\r\n ctor = Int32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.INT_VEC2:\r\n ctor = Int32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.INT_VEC3:\r\n ctor = Int32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.INT_VEC4:\r\n ctor = Int32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT:\r\n case WebGLEnum.BOOL:\r\n ctor = Uint32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC2:\r\n case WebGLEnum.BOOL_VEC2:\r\n ctor = Uint32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC3:\r\n case WebGLEnum.BOOL_VEC3:\r\n ctor = Uint32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.UNSIGNED_INT_VEC4:\r\n case WebGLEnum.BOOL_VEC4:\r\n ctor = Uint32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.FLOAT:\r\n ctor = Float32Array;\r\n elementSize = 4;\r\n break;\r\n case WebGLEnum.FLOAT_VEC2:\r\n ctor = Float32Array;\r\n elementSize = 8;\r\n break;\r\n case WebGLEnum.FLOAT_VEC3:\r\n ctor = Float32Array;\r\n elementSize = 12;\r\n break;\r\n case WebGLEnum.FLOAT_VEC4:\r\n case WebGLEnum.FLOAT_MAT2:\r\n ctor = Float32Array;\r\n elementSize = 16;\r\n break;\r\n case WebGLEnum.FLOAT_MAT2x3:\r\n case WebGLEnum.FLOAT_MAT3x2:\r\n ctor = Float32Array;\r\n elementSize = 24;\r\n break;\r\n case WebGLEnum.FLOAT_MAT2x4:\r\n case WebGLEnum.FLOAT_MAT4x2:\r\n ctor = Float32Array;\r\n elementSize = 32;\r\n break;\r\n case WebGLEnum.FLOAT_MAT3:\r\n ctor = Float32Array;\r\n elementSize = 36;\r\n break;\r\n case WebGLEnum.FLOAT_MAT3x4:\r\n case WebGLEnum.FLOAT_MAT4x3:\r\n ctor = Float32Array;\r\n elementSize = 48;\r\n break;\r\n case WebGLEnum.FLOAT_MAT4:\r\n ctor = Float32Array;\r\n elementSize = 64;\r\n break;\r\n }\r\n return { ctor: ctor!, elementSize };\r\n }\r\n}\r\n","import { WebGLGPUObject } from './gpuobject_webgl';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport {\r\n textureTargetMap,\r\n textureWrappingMap,\r\n textureMagFilterToWebGL,\r\n textureMinFilterToWebGL,\r\n compareFuncMap\r\n} from './constants_webgl';\r\nimport type { SamplerOptions, TextureSampler } from '@zephyr3d/device';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\nimport type { WebGLDevice } from './device_webgl';\r\nimport { isWebGL2 } from './utils';\r\nimport type { RequireOptionals } from '@zephyr3d/base';\r\n\r\nexport class WebGLTextureSampler\r\n extends WebGLGPUObject<WebGLSampler>\r\n implements TextureSampler<WebGLSampler>\r\n{\r\n private readonly _options: RequireOptionals<SamplerOptions>;\r\n constructor(device: WebGLDevice, options: SamplerOptions) {\r\n super(device);\r\n this._options = Object.assign(\r\n {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none',\r\n lodMin: 0,\r\n lodMax: 32,\r\n compare: null,\r\n maxAnisotropy: 1\r\n },\r\n options || {}\r\n );\r\n this._load();\r\n }\r\n get addressModeU() {\r\n return this._options.addressU;\r\n }\r\n get addressModeV() {\r\n return this._options.addressV;\r\n }\r\n get addressModeW() {\r\n return this._options.addressW;\r\n }\r\n get magFilter() {\r\n return this._options.magFilter;\r\n }\r\n get minFilter() {\r\n return this._options.minFilter;\r\n }\r\n get mipFilter() {\r\n return this._options.mipFilter;\r\n }\r\n get lodMin() {\r\n return this._options.lodMin;\r\n }\r\n get lodMax() {\r\n return this._options.lodMax;\r\n }\r\n get compare() {\r\n return this._options.compare;\r\n }\r\n get maxAnisotropy() {\r\n return this._options.maxAnisotropy;\r\n }\r\n destroy() {\r\n if (this._object && isWebGL2(this._device.context)) {\r\n (this._device.context as WebGL2RenderingContext).deleteSampler(this._object);\r\n }\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this._load();\r\n }\r\n }\r\n apply(texture: WebGLBaseTexture) {\r\n if (texture?.object && !this._device.isWebGL2 && !this._device.isContextLost()) {\r\n const gl = this._device.context;\r\n const target = textureTargetMap[texture.target];\r\n this._device.bindTexture(target, 0, texture);\r\n //gl.bindTexture(target, texture.object);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_S, textureWrappingMap[this._options.addressU]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_T, textureWrappingMap[this._options.addressV]);\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(this._options.magFilter)\r\n );\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(this._options.minFilter, this._options.mipFilter)\r\n );\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, this._options.maxAnisotropy);\r\n }\r\n }\r\n }\r\n private _load() {\r\n if (!isWebGL2(this._device.context)) {\r\n this._object = {};\r\n return true;\r\n }\r\n if (!this._device.isContextLost()) {\r\n const gl = this._device.context;\r\n if (!this._object) {\r\n this._object = gl.createSampler();\r\n }\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_S,\r\n textureWrappingMap[this._options.addressU]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_T,\r\n textureWrappingMap[this._options.addressV]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_WRAP_R,\r\n textureWrappingMap[this._options.addressW]\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_MAG_FILTER,\r\n textureMagFilterToWebGL(this._options.magFilter)\r\n );\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(this._options.minFilter, this._options.mipFilter)\r\n );\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MIN_LOD, this._options.lodMin);\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MAX_LOD, this._options.lodMax);\r\n if (this._options.compare === null) {\r\n gl.samplerParameteri(this._object, WebGLEnum.TEXTURE_COMPARE_MODE, WebGLEnum.NONE);\r\n } else {\r\n gl.samplerParameteri(this._object, WebGLEnum.TEXTURE_COMPARE_MODE, WebGLEnum.COMPARE_REF_TO_TEXTURE);\r\n gl.samplerParameteri(\r\n this._object,\r\n WebGLEnum.TEXTURE_COMPARE_FUNC,\r\n compareFuncMap[this._options.compare]\r\n );\r\n }\r\n if (this._device.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.samplerParameterf(this._object, WebGLEnum.TEXTURE_MAX_ANISOTROPY, this._options.maxAnisotropy);\r\n }\r\n }\r\n return true;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return true;\r\n }\r\n}\r\n","import { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { SamplerOptions } from '@zephyr3d/device';\r\nimport type { WebGLDevice } from './device_webgl';\r\nexport class SamplerCache {\r\n private readonly _device: WebGLDevice;\r\n private _samplers: Record<string, WebGLTextureSampler>;\r\n constructor(device: WebGLDevice) {\r\n this._device = device;\r\n this._samplers = {};\r\n }\r\n fetchSampler(options: SamplerOptions) {\r\n const hash = this.hash(options);\r\n let sampler = this._samplers[hash];\r\n if (!sampler) {\r\n sampler = this.createSampler(options);\r\n this._samplers[hash] = sampler;\r\n }\r\n return sampler;\r\n }\r\n private hash(options: SamplerOptions) {\r\n const addressU = options.addressU ? String(options.addressU) : '';\r\n const addressV = options.addressV ? String(options.addressV) : '';\r\n const addressW = options.addressW ? String(options.addressW) : '';\r\n const magFilter = options.magFilter ? String(options.magFilter) : '';\r\n const minFilter = options.minFilter ? String(options.minFilter) : '';\r\n const mipFilter = options.mipFilter ? String(options.mipFilter) : '';\r\n const lodMin = options.lodMin ? String(options.lodMin) : '';\r\n const lodMax = options.lodMax ? String(options.lodMax) : '';\r\n const compare = options.compare ? String(options.compare) : '';\r\n const maxAnisotropy = options.maxAnisotropy ? String(options.maxAnisotropy) : '';\r\n return `${addressU}:${addressV}:${addressW}:${magFilter}:${minFilter}:${mipFilter}:${lodMin}:${lodMax}:${compare}:${maxAnisotropy}`;\r\n }\r\n private createSampler(options: SamplerOptions) {\r\n return new WebGLTextureSampler(this._device, options);\r\n }\r\n}\r\n","import type { Vector4, TypedArray, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { makeObservable } from '@zephyr3d/base';\r\nimport type {\r\n WebGLContext,\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n TextureSampler,\r\n Texture2D,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n BindGroup,\r\n BindGroupLayout,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n VertexLayoutOptions,\r\n BaseTexture,\r\n GPUProgramConstructParams,\r\n RenderProgramConstructParams,\r\n DeviceOptions,\r\n DeviceViewport,\r\n DeviceCaps,\r\n PrimitiveType,\r\n TextureFormat,\r\n RenderStateSet,\r\n PBStructTypeInfo,\r\n DeviceBackend,\r\n DeviceEventMap,\r\n AbstractDevice,\r\n RenderBundle\r\n} from '@zephyr3d/device';\r\nimport {\r\n hasAlphaChannel,\r\n hasRedChannel,\r\n hasGreenChannel,\r\n hasBlueChannel,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n isFloatTextureFormat,\r\n getTextureFormatBlockSize,\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n BaseDevice,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo\r\n} from '@zephyr3d/device';\r\nimport { isWebGL2, WebGLError } from './utils';\r\nimport { WebGLEnum } from './webgl_enum';\r\nimport { WebGLTexture2D } from './texture2d_webgl';\r\nimport { WebGLTexture2DArray } from './texture2darray_webgl';\r\nimport { WebGLTexture3D } from './texture3d_webgl';\r\nimport { WebGLTextureCube } from './texturecube_webgl';\r\nimport { WebGLTextureVideo } from './texturevideo_webgl';\r\nimport { WebGLVertexLayout } from './vertexlayout_webgl';\r\nimport { WebGLGPUBuffer } from './buffer_webgl';\r\nimport { WebGLIndexBuffer } from './indexbuffer_webgl';\r\nimport { WebGLFrameBuffer } from './framebuffer_webgl';\r\nimport {\r\n WebGLBlendingState,\r\n WebGLColorState,\r\n WebGLDepthState,\r\n WebGLRasterizerState,\r\n WebGLRenderStateSet,\r\n WebGLStencilState\r\n} from './renderstate_webgl';\r\nimport { GPUTimer } from './gpu_timer';\r\nimport { WebGLTextureCaps, WebGLFramebufferCaps, WebGLMiscCaps, WebGLShaderCaps } from './capabilities_webgl';\r\nimport { WebGLBindGroup } from './bindgroup_webgl';\r\nimport { WebGLGPUProgram } from './gpuprogram_webgl';\r\nimport {\r\n primitiveTypeMap,\r\n textureMagFilterToWebGL,\r\n textureMinFilterToWebGL,\r\n textureWrappingMap,\r\n typeMap\r\n} from './constants_webgl';\r\nimport { SamplerCache } from './sampler_cache';\r\nimport { WebGLStructuredBuffer } from './structuredbuffer_webgl';\r\nimport type { WebGLTextureSampler } from './sampler_webgl';\r\nimport type { WebGLBaseTexture } from './basetexture_webgl';\r\n\r\ndeclare global {\r\n interface WebGLRenderingContext {\r\n _currentFramebuffer?: Nullable<WebGLFrameBuffer>;\r\n _currentProgram?: Nullable<WebGLGPUProgram>;\r\n }\r\n interface WebGL2RenderingContext {\r\n _currentFramebuffer?: Nullable<WebGLFrameBuffer>;\r\n _currentProgram?: Nullable<WebGLGPUProgram>;\r\n }\r\n}\r\n\r\ntype VAOObject = WebGLVertexArrayObject | WebGLVertexArrayObjectOES;\r\n\r\ntype WebGLRenderBundle = {\r\n program: Nullable<WebGLGPUProgram>;\r\n bindGroups: WebGLBindGroup[];\r\n bindGroupOffsets: Nullable<Iterable<number>>[];\r\n vertexLayout: Nullable<WebGLVertexLayout>;\r\n primitiveType: PrimitiveType;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n first: number;\r\n count: number;\r\n numInstances: number;\r\n}[];\r\n\r\nexport interface VertexArrayObjectEXT {\r\n createVertexArray: () => VAOObject;\r\n bindVertexArray: (arrayObject: Nullable<VAOObject>) => void;\r\n deleteVertexArray: (arrayObject: VAOObject) => void;\r\n isVertexArray: (arrayObject: VAOObject) => GLboolean;\r\n}\r\n\r\nexport interface InstancedArraysEXT {\r\n drawArraysInstanced: (mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei) => void;\r\n drawElementsInstanced: (\r\n mode: GLenum,\r\n count: GLsizei,\r\n type: GLenum,\r\n offset: GLintptr,\r\n primcount: GLsizei\r\n ) => void;\r\n vertexAttribDivisor: (index: GLuint, divisor: GLuint) => void;\r\n}\r\n\r\nexport interface DrawBuffersEXT {\r\n drawBuffers(buffers: number[]): void;\r\n}\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst tempInt32Array = new Int32Array(4);\r\nconst tempUint32Array = new Uint32Array(4);\r\n\r\nexport class WebGLDevice extends BaseDevice {\r\n private readonly _context: WebGLContext;\r\n private readonly _isWebGL2: boolean;\r\n private readonly _msaaSampleCount: number;\r\n private readonly _loseContextExtension: Nullable<WEBGL_lose_context>;\r\n private _contextLost: boolean;\r\n private _isRendering: boolean;\r\n private _reverseWindingOrder: boolean;\r\n private _deviceCaps!: DeviceCaps;\r\n private _vaoExt: Nullable<VertexArrayObjectEXT>;\r\n private _instancedArraysExt: Nullable<InstancedArraysEXT>;\r\n private _drawBuffersExt: Nullable<DrawBuffersEXT>;\r\n private _currentProgram: Nullable<WebGLGPUProgram>;\r\n private _currentVertexData: Nullable<WebGLVertexLayout>;\r\n private _currentStateSet: Nullable<WebGLRenderStateSet>;\r\n private _currentBindGroups: WebGLBindGroup[];\r\n private _currentBindGroupOffsets: Nullable<Iterable<number>>[];\r\n private _currentViewport: DeviceViewport;\r\n private _currentScissorRect: DeviceViewport;\r\n private _samplerCache: SamplerCache;\r\n private _textureSamplerMap: WeakMap<BaseTexture, Nullable<WebGLTextureSampler>>;\r\n private _captureRenderBundle: Nullable<WebGLRenderBundle>;\r\n private _deviceUniformBuffers: WebGLBuffer[];\r\n private _deviceUniformBufferOffsets: number[];\r\n private _bindTextures: Record<number, Nullable<WebGLTexture>[]>;\r\n private _bindSamplers: WebGLSampler[];\r\n private _readFormats: Record<\r\n string,\r\n {\r\n format: number;\r\n type: number;\r\n }\r\n >;\r\n private readonly _adapterInfo: { vendor: string; renderer: string; version: string };\r\n constructor(backend: DeviceBackend, cvs: HTMLCanvasElement, options?: DeviceOptions) {\r\n super(cvs, backend, options?.dpr);\r\n this._isRendering = false;\r\n this._captureRenderBundle = null;\r\n this._msaaSampleCount = options?.msaa ? 4 : 1;\r\n const context: WebGLContext = this.canvas.getContext(backend === backend1 ? 'webgl' : 'webgl2', {\r\n antialias: !!options?.msaa,\r\n depth: true,\r\n stencil: true,\r\n premultipliedAlpha: false\r\n }) as WebGLContext;\r\n if (!context) {\r\n throw new Error('Invalid argument or no webgl support');\r\n }\r\n this._isWebGL2 = isWebGL2(context);\r\n this._adapterInfo = {\r\n vendor: context.getParameter(context.VENDOR),\r\n renderer: context.getParameter(context.RENDERER),\r\n version: context.getParameter(context.VERSION)\r\n };\r\n this._contextLost = false;\r\n this._vaoExt = null;\r\n this._instancedArraysExt = null;\r\n this._drawBuffersExt = null;\r\n this._reverseWindingOrder = false;\r\n this._context = context;\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._deviceUniformBuffers = [];\r\n this._deviceUniformBufferOffsets = [];\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n this._bindSamplers = [];\r\n this._samplerCache = new SamplerCache(this);\r\n this._textureSamplerMap = new WeakMap();\r\n this._loseContextExtension = this._context.getExtension('WEBGL_lose_context');\r\n this._readFormats = {};\r\n this.canvas.addEventListener(\r\n 'webglcontextlost',\r\n (evt) => {\r\n this._contextLost = true;\r\n evt.preventDefault();\r\n this.handleContextLost();\r\n },\r\n false\r\n );\r\n this.canvas.addEventListener(\r\n 'webglcontextrestored',\r\n () => {\r\n this._contextLost = false;\r\n this.handleContextRestored();\r\n },\r\n false\r\n );\r\n }\r\n get context() {\r\n return this._context;\r\n }\r\n getAdapterInfo() {\r\n return this._adapterInfo;\r\n }\r\n getFrameBufferSampleCount() {\r\n return this.getFramebuffer()?.getSampleCount() ?? this._msaaSampleCount;\r\n }\r\n get isWebGL2() {\r\n return this._isWebGL2;\r\n }\r\n get drawingBufferWidth() {\r\n return this.getDrawingBufferWidth();\r\n }\r\n get drawingBufferHeight() {\r\n return this.getDrawingBufferHeight();\r\n }\r\n get clientWidth() {\r\n return this.canvas.clientWidth;\r\n }\r\n get clientHeight() {\r\n return this.canvas.clientHeight;\r\n }\r\n isContextLost() {\r\n return this._contextLost;\r\n }\r\n getDeviceCaps(): Immutable<DeviceCaps> {\r\n return this._deviceCaps;\r\n }\r\n get vaoExt() {\r\n return this._vaoExt;\r\n }\r\n get instancedArraysExt() {\r\n return this._instancedArraysExt;\r\n }\r\n get drawBuffersExt() {\r\n return this._drawBuffersExt;\r\n }\r\n getDrawingBufferWidth() {\r\n return this._context._currentFramebuffer?.getWidth() || this._context.drawingBufferWidth;\r\n }\r\n getDrawingBufferHeight() {\r\n return this._context._currentFramebuffer?.getHeight() || this._context.drawingBufferHeight;\r\n }\r\n getBackBufferWidth() {\r\n return this.canvas.width;\r\n }\r\n getBackBufferHeight() {\r\n return this.canvas.height;\r\n }\r\n invalidateBindingTextures() {\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n }\r\n bindTexture(\r\n target: number,\r\n layer: number,\r\n texture: Nullable<WebGLBaseTexture>,\r\n sampler?: Nullable<WebGLTextureSampler>\r\n ) {\r\n const tex = texture?.object ?? null;\r\n const gl = this._context;\r\n gl.activeTexture(WebGLEnum.TEXTURE0 + layer);\r\n if (this._bindTextures[target][layer] !== tex) {\r\n gl.bindTexture(target, tex);\r\n this._bindTextures[target][layer] = tex;\r\n }\r\n if (this._isWebGL2) {\r\n const samp = sampler?.object ?? null;\r\n if (samp && this._bindSamplers[layer] !== samp) {\r\n (gl as WebGL2RenderingContext).bindSampler(layer, samp);\r\n this._bindSamplers[layer] = samp;\r\n }\r\n } else if (texture && sampler && this._textureSamplerMap.get(texture) !== sampler) {\r\n const fallback = texture.isWebGL1Fallback;\r\n this._textureSamplerMap.set(texture, sampler);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_S, textureWrappingMap[sampler.addressModeU]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_WRAP_T, textureWrappingMap[sampler.addressModeV]);\r\n gl.texParameteri(target, WebGLEnum.TEXTURE_MAG_FILTER, textureMagFilterToWebGL(sampler.magFilter));\r\n gl.texParameteri(\r\n target,\r\n WebGLEnum.TEXTURE_MIN_FILTER,\r\n textureMinFilterToWebGL(sampler.minFilter, fallback ? 'none' : sampler.mipFilter)\r\n );\r\n if (this.getDeviceCaps().textureCaps.supportAnisotropicFiltering) {\r\n gl.texParameterf(target, WebGLEnum.TEXTURE_MAX_ANISOTROPY, sampler.maxAnisotropy);\r\n }\r\n }\r\n }\r\n bindUniformBuffer(index: number, buffer: WebGLGPUBuffer, offset: number) {\r\n if (\r\n this._deviceUniformBuffers[index] !== buffer.object ||\r\n this._deviceUniformBufferOffsets[index] !== offset\r\n ) {\r\n if (offset) {\r\n (this.context as WebGL2RenderingContext).bindBufferRange(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n index,\r\n buffer.object,\r\n offset,\r\n buffer.byteLength - offset\r\n );\r\n } else {\r\n (this.context as WebGL2RenderingContext).bindBufferBase(\r\n WebGLEnum.UNIFORM_BUFFER,\r\n index,\r\n buffer.object\r\n );\r\n }\r\n this._deviceUniformBuffers[index] = buffer.object!;\r\n this._deviceUniformBufferOffsets[index] = offset;\r\n }\r\n }\r\n async initContext() {\r\n this.initContextState();\r\n await this.initResizer();\r\n /*\r\n this.on('resize', () => {\r\n const width = Math.max(1, Math.round(this.canvas.clientWidth * this._dpr));\r\n const height = Math.max(1, Math.round(this.canvas.clientHeight * this._dpr));\r\n if (width !== this.canvas.width || height !== this.canvas.height) {\r\n this.canvas.width = width;\r\n this.canvas.height = height;\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissorRect);\r\n }\r\n });\r\n this.dispatchEvent('resize', this.canvas.clientWidth, this.canvas.clientHeight);\r\n */\r\n }\r\n protected _handleResize(_cssWidth: number, _cssHeight: number, deviceWidth: number, deviceHeight: number) {\r\n const lastWidth = this.canvas.clientWidth;\r\n const lastHeight = this.canvas.clientHeight;\r\n this.canvas.width = deviceWidth;\r\n this.canvas.height = deviceHeight;\r\n if (\r\n (this.canvas.clientWidth !== lastWidth && this.canvas.clientWidth === this.canvas.width) ||\r\n (this.canvas.clientHeight !== lastHeight && this.canvas.clientHeight === this.canvas.height)\r\n ) {\r\n console.warn(\r\n '[Engine] Canvas intrinsic size affected layout. CSS size locked to prevent feedback loop.'\r\n );\r\n this.canvas.style.width = `${lastWidth}px`;\r\n this.canvas.style.height = `${lastHeight}px`;\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissorRect);\r\n }\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n const gl = this._context;\r\n const colorFlag = clearColor ? gl.COLOR_BUFFER_BIT : 0;\r\n const depthFlag = typeof clearDepth === 'number' ? gl.DEPTH_BUFFER_BIT : 0;\r\n const stencilFlag = typeof clearStencil === 'number' ? gl.STENCIL_BUFFER_BIT : 0;\r\n if (colorFlag || depthFlag || stencilFlag) {\r\n WebGLDepthState.applyDefaults(this._context);\r\n if (isWebGL2(gl) && gl._currentFramebuffer) {\r\n if (depthFlag || stencilFlag) {\r\n const depthAttachment = gl._currentFramebuffer.getDepthAttachment();\r\n if (depthAttachment) {\r\n gl.clearBufferfi(WebGLEnum.DEPTH_STENCIL, 0, clearDepth ?? 1, clearStencil ?? 0);\r\n }\r\n }\r\n if (clearColor) {\r\n const attachments = gl._currentFramebuffer.getColorAttachments();\r\n for (let i = 0; i < attachments.length; i++) {\r\n if (isIntegerTextureFormat(attachments[i].format)) {\r\n if (isSignedTextureFormat(attachments[i].format)) {\r\n tempInt32Array[0] = clearColor[0];\r\n tempInt32Array[1] = clearColor[1];\r\n tempInt32Array[2] = clearColor[2];\r\n tempInt32Array[3] = clearColor[3];\r\n gl.clearBufferiv(WebGLEnum.COLOR, i, tempInt32Array);\r\n } else {\r\n tempUint32Array[0] = clearColor[0];\r\n tempUint32Array[1] = clearColor[1];\r\n tempUint32Array[2] = clearColor[2];\r\n tempUint32Array[3] = clearColor[3];\r\n gl.clearBufferuiv(WebGLEnum.COLOR, i, tempUint32Array);\r\n }\r\n } else {\r\n gl.clearBufferfv(WebGLEnum.COLOR, i, clearColor);\r\n }\r\n }\r\n }\r\n } else {\r\n if (clearColor) {\r\n gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);\r\n }\r\n if (depthFlag) {\r\n gl.clearDepth(clearDepth as number);\r\n }\r\n if (stencilFlag) {\r\n gl.clearStencil(clearStencil as number);\r\n }\r\n gl.clear(colorFlag | depthFlag | stencilFlag);\r\n }\r\n (gl._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (gl._currentFramebuffer as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n }\r\n // factory\r\n createGPUTimer() {\r\n return new GPUTimer(this);\r\n }\r\n createRenderStateSet() {\r\n return new WebGLRenderStateSet(this._context);\r\n }\r\n createBlendingState() {\r\n return new WebGLBlendingState();\r\n }\r\n createColorState() {\r\n return new WebGLColorState();\r\n }\r\n createRasterizerState() {\r\n return new WebGLRasterizerState();\r\n }\r\n createDepthState() {\r\n return new WebGLDepthState();\r\n }\r\n createStencilState() {\r\n return new WebGLStencilState();\r\n }\r\n createSampler(options: SamplerOptions) {\r\n return this._samplerCache.fetchSampler(options) as TextureSampler;\r\n }\r\n createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!data) {\r\n console.error(`Device.createTextureFromMipmapData() failed: invalid data`);\r\n return null;\r\n }\r\n if (data.isCubemap) {\r\n const tex = new WebGLTextureCube(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isVolume) {\r\n const tex = new WebGLTexture3D(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isArray) {\r\n const tex = new WebGLTexture2DArray(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else {\r\n const tex = new WebGLTexture2D(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n }\r\n }\r\n createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTexture2D) ?? new WebGLTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2D() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTexture2D) ?? new WebGLTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2DFromImage() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.loadFromElement(element, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGLTexture2DArray) ?? new WebGLTexture2DArray(this);\r\n if (!tex.isTexture2DArray()) {\r\n console.error('createTexture2DArray() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!elements || elements.length === 0) {\r\n console.error('createTexture2DArrayFromImages() failed: Invalid image elements');\r\n return null;\r\n }\r\n let width = 0;\r\n let height = 0;\r\n for (const element of elements) {\r\n if (width === 0 || height === 0) {\r\n width = element.width;\r\n height = element.height;\r\n } else if (width !== element.width || height !== element.height) {\r\n console.error('createTexture2DArrayFromImages() failed: Image elements must have the same size');\r\n return null;\r\n }\r\n }\r\n if (options?.texture && !options.texture.isTexture2DArray()) {\r\n console.error('createTexture2DArrayFromImages() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n let tex: Nullable<WebGLTexture2DArray> = options?.texture as Nullable<WebGLTexture2DArray>;\r\n if (tex) {\r\n if (tex.depth !== elements.length) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Layer count of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n if (tex.width !== width || tex.height !== height) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Size of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n } else {\r\n tex = this.createTexture2DArray(\r\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\r\n width,\r\n height,\r\n elements.length,\r\n options\r\n );\r\n if (!tex) {\r\n console.error('createTexture2DArrayFromImages() failed');\r\n return null;\r\n }\r\n for (let i = 0; i < elements.length; i++) {\r\n tex.updateFromElement(elements[i], 0, 0, i, 0, 0, width, height);\r\n }\r\n }\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!this.isWebGL2) {\r\n console.error('device does not support 3d texture');\r\n return null;\r\n }\r\n const tex = (options?.texture as WebGLTexture3D) ?? new WebGLTexture3D(this);\r\n if (!tex.isTexture3D()) {\r\n console.error('createTexture3D() failed: options.texture must be 3d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGLTextureCube) ?? new WebGLTextureCube(this);\r\n if (!tex.isTextureCube()) {\r\n console.error('createCubeTexture() failed: options.texture must be cube texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, size, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions) {\r\n const tex = new WebGLTextureVideo(this, el);\r\n tex.samplerOptions = samplerOptions ?? null;\r\n return tex;\r\n }\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number) {\r\n if (!src?.isFramebuffer() || !dst?.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): invalid framebuffer or texture');\r\n return;\r\n }\r\n if (!Number.isInteger(level) || level < 0 || level >= dst.mipLevelCount) {\r\n console.error('copyFramebufferToTexture2D(): invalid mipmap level');\r\n return;\r\n }\r\n const tex = src.getColorAttachments()[index];\r\n if (!tex || !tex.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): Color attachment is not a 2D texture');\r\n return;\r\n }\r\n const srcLevel = src.getColorAttachmentMipLevel(index);\r\n const srcWidth = Math.max(tex.width >> srcLevel, 1);\r\n const srcHeight = Math.max(tex.height >> srcLevel, 1);\r\n const dstWidth = Math.max(dst.width >> level, 1);\r\n const dstHeight = Math.max(dst.height >> level, 1);\r\n if (srcWidth !== dstWidth || srcHeight !== dstHeight) {\r\n console.error('Source texture and destination texture must have same size');\r\n return;\r\n }\r\n if (tex.format !== dst.format) {\r\n console.error(\r\n 'copyFramebufferToTexture2D(): Color attachment must have same format with destination texture'\r\n );\r\n return;\r\n }\r\n if (index > 0 && !this.isWebGL2) {\r\n console.error(\r\n 'copyFramebufferToTexture2D(): Non-zero color attachment index requires WebGL2 or WebGPU device'\r\n );\r\n return;\r\n }\r\n this.pushDeviceStates();\r\n // If src is current framebuffer, force mipmaps to be generated\r\n this.setFramebuffer(null);\r\n this.setFramebuffer(src);\r\n const gl = this._context;\r\n if (this.isWebGL2) {\r\n (gl as WebGL2RenderingContext).readBuffer(gl.COLOR_ATTACHMENT0 + index);\r\n }\r\n this.bindTexture(gl.TEXTURE_2D, 0, dst as WebGLTexture2D);\r\n gl.copyTexSubImage2D(gl.TEXTURE_2D, level, 0, 0, 0, 0, srcWidth, srcHeight);\r\n this.popDeviceStates();\r\n }\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number) {\r\n if (!src || !dst) {\r\n console.error('CopyTexture2D(): invalid texture');\r\n return;\r\n }\r\n if (!Number.isInteger(srcLevel) || srcLevel < 0 || srcLevel >= src.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid source mipmap level');\r\n return;\r\n }\r\n const fb = this.createFrameBuffer([src], null);\r\n fb.setColorAttachmentGenerateMipmaps(0, false);\r\n fb.setColorAttachmentMipLevel(0, srcLevel);\r\n this.copyFramebufferToTexture2D(fb, 0, dst, dstLevel);\r\n fb.dispose();\r\n }\r\n createGPUProgram(params: GPUProgramConstructParams) {\r\n if (params.type === 'compute') {\r\n throw new Error('device does not support compute shader');\r\n }\r\n const renderProgramParams = params.params as RenderProgramConstructParams;\r\n return new WebGLGPUProgram(\r\n this,\r\n renderProgramParams.vs,\r\n renderProgramParams.fs,\r\n renderProgramParams.bindGroupLayouts,\r\n renderProgramParams.vertexAttributes\r\n );\r\n }\r\n createBindGroup(layout: Immutable<BindGroupLayout>) {\r\n return new WebGLBindGroup(this, layout);\r\n }\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions) {\r\n return new WebGLGPUBuffer(this, this.parseBufferOptions(options), sizeInBytes, !this._isWebGL2);\r\n }\r\n copyBuffer(\r\n sourceBuffer: GPUDataBuffer<unknown>,\r\n destBuffer: GPUDataBuffer<unknown>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n if (!this.isWebGL2) {\r\n console.error(`copyBuffer() is not supported for current device`);\r\n return;\r\n }\r\n const gl = this._context as WebGL2RenderingContext;\r\n gl.bindBuffer(gl.COPY_READ_BUFFER, sourceBuffer.object!);\r\n gl.bindBuffer(gl.COPY_WRITE_BUFFER, destBuffer.object!);\r\n gl.copyBufferSubData(gl.COPY_READ_BUFFER, gl.COPY_WRITE_BUFFER, srcOffset, dstOffset, bytes);\r\n }\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ) {\r\n return new WebGLIndexBuffer(this, data, this.parseBufferOptions(options, 'index'));\r\n }\r\n createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options?: BufferCreationOptions,\r\n data?: TypedArray\r\n ) {\r\n return new WebGLStructuredBuffer(this, structureType, this.parseBufferOptions(options), data);\r\n }\r\n createVertexLayout(options: VertexLayoutOptions) {\r\n return new WebGLVertexLayout(this, options);\r\n }\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachement: Nullable<BaseTexture>,\r\n options?: FrameBufferOptions\r\n ) {\r\n return new WebGLFrameBuffer(this, colorAttachments, depthAttachement, options);\r\n }\r\n setBindGroup(index: number, bindGroup: BindGroup, bindGroupOffsets?: Nullable<Iterable<number>>) {\r\n if (bindGroupOffsets && !isWebGL2(this._context)) {\r\n throw new Error(`setBindGroup(): no dynamic offset buffer support for WebGL1 device`);\r\n }\r\n this._currentBindGroups[index] = bindGroup as WebGLBindGroup;\r\n this._currentBindGroupOffsets[index] = bindGroupOffsets || null;\r\n }\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>] {\r\n return [this._currentBindGroups[index], this._currentBindGroupOffsets[index]];\r\n }\r\n // render related\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (vp === null || vp === undefined || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.drawingBufferWidth),\r\n height: this.deviceYToScreen(this.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n this._context.viewport(\r\n this.screenXToDevice(this._currentViewport.x),\r\n this.screenYToDevice(this._currentViewport.y),\r\n this.screenXToDevice(this._currentViewport.width),\r\n this.screenYToDevice(this._currentViewport.height)\r\n );\r\n }\r\n getViewport(): Immutable<DeviceViewport> {\r\n return this._currentViewport;\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.drawingBufferWidth),\r\n height: this.deviceYToScreen(this.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissorRect = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissorRect = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n this._context.scissor(\r\n this.screenXToDevice(this._currentScissorRect.x),\r\n this.screenYToDevice(this._currentScissorRect.y),\r\n this.screenXToDevice(this._currentScissorRect.width),\r\n this.screenYToDevice(this._currentScissorRect.height)\r\n );\r\n }\r\n getScissor(): Immutable<DeviceViewport> {\r\n return this._currentScissorRect;\r\n }\r\n setProgram(program: Nullable<GPUProgram>) {\r\n this._currentProgram = program as WebGLGPUProgram;\r\n }\r\n getProgram() {\r\n return this._currentProgram;\r\n }\r\n setVertexLayout(vertexData: Nullable<VertexLayout>) {\r\n this._currentVertexData = vertexData as WebGLVertexLayout;\r\n }\r\n getVertexLayout() {\r\n return this._currentVertexData;\r\n }\r\n setRenderStates(stateSet: Nullable<RenderStateSet>) {\r\n this._currentStateSet = stateSet as WebGLRenderStateSet;\r\n }\r\n getRenderStates() {\r\n return this._currentStateSet;\r\n }\r\n getFramebuffer() {\r\n return this._context._currentFramebuffer ?? null;\r\n }\r\n reverseVertexWindingOrder(reverse: boolean) {\r\n if (this._reverseWindingOrder !== !!reverse) {\r\n this._reverseWindingOrder = !!reverse;\r\n this._context.frontFace(reverse ? this._context.CW : this._context.CCW);\r\n }\r\n }\r\n isWindingOrderReversed() {\r\n return this._reverseWindingOrder;\r\n }\r\n flush() {\r\n this.context.flush();\r\n }\r\n async readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb ? fb.getColorAttachments()[index] : null;\r\n const format = colorAttachment ? colorAttachment.format : 'rgba8unorm';\r\n let formatInfo = this._readFormats[format];\r\n if (!formatInfo) {\r\n formatInfo = {\r\n format: this.context.getParameter(WebGLEnum.IMPLEMENTATION_COLOR_READ_FORMAT),\r\n type: this.context.getParameter(WebGLEnum.IMPLEMENTATION_COLOR_READ_TYPE)\r\n };\r\n this._readFormats[format] = formatInfo;\r\n }\r\n const glFormat = formatInfo.format;\r\n const glType = formatInfo.type;\r\n const pixelSize = getTextureFormatBlockSize(format);\r\n if (\r\n (glFormat !== WebGLEnum.RGBA ||\r\n (glType !== WebGLEnum.UNSIGNED_BYTE &&\r\n glType !== WebGLEnum.FLOAT &&\r\n glType !== WebGLEnum.HALF_FLOAT)) &&\r\n !isWebGL2(this.context)\r\n ) {\r\n throw new Error(`readPixels() failed: invalid format: ${format}`);\r\n }\r\n const byteSize = w * h * pixelSize;\r\n if (buffer.byteLength < byteSize) {\r\n throw new Error(`readPixels() failed: destination buffer must have at least ${byteSize} bytes`);\r\n }\r\n if (isWebGL2(this.context)) {\r\n const stagingBuffer = this.createBuffer(byteSize, {\r\n usage: 'pack-pixel',\r\n managed: false\r\n });\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, stagingBuffer.object!);\r\n this.context.readBuffer(fb ? WebGLEnum.COLOR_ATTACHMENT0 + index : WebGLEnum.COLOR_ATTACHMENT0);\r\n //this.flush();\r\n this.context.readPixels(x, y, w, h, glFormat, glType, 0);\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, null);\r\n const data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\r\n await stagingBuffer.getBufferSubData(data);\r\n stagingBuffer.dispose();\r\n } else {\r\n this.context.readPixels(x, y, w, h, glFormat, glType, buffer);\r\n }\r\n }\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb ? fb.getColorAttachments()[index] : null;\r\n const format = colorAttachment ? colorAttachment.format : 'rgba8unorm';\r\n let glFormat: number = WebGLEnum.NONE;\r\n let glType: number = WebGLEnum.NONE;\r\n if (!isWebGL2(this.context)) {\r\n throw new Error('readPixels() failed: readPixels() requires webgl2 device');\r\n }\r\n if (isCompressedTextureFormat(format) || hasDepthChannel(format)) {\r\n throw new Error(`readPixels() failed: invalid format: ${format}`);\r\n }\r\n const r = hasRedChannel(format);\r\n const g = hasGreenChannel(format);\r\n const b = hasBlueChannel(format);\r\n const a = hasAlphaChannel(format);\r\n const numChannels = (r ? 1 : 0) + (g ? 1 : 0) + (b ? 1 : 0) + (a ? 1 : 0);\r\n const size = getTextureFormatBlockSize(format) / numChannels;\r\n const integer = isIntegerTextureFormat(format);\r\n const float = isFloatTextureFormat(format);\r\n const signed = isSignedTextureFormat(format);\r\n if (r && g && b && a) {\r\n glFormat = integer ? WebGLEnum.RGBA_INTEGER : WebGLEnum.RGBA;\r\n } else if (r && g) {\r\n glFormat = integer ? WebGLEnum.RG_INTEGER : WebGLEnum.RG;\r\n } else if (r) {\r\n glFormat = integer ? WebGLEnum.RED_INTEGER : WebGLEnum.RED;\r\n }\r\n if (size === 1) {\r\n glType = signed ? WebGLEnum.BYTE : WebGLEnum.UNSIGNED_BYTE;\r\n } else if (size === 2) {\r\n glType = float ? WebGLEnum.HALF_FLOAT : signed ? WebGLEnum.SHORT : WebGLEnum.UNSIGNED_SHORT;\r\n } else if (size === 4) {\r\n glType = float ? WebGLEnum.FLOAT : signed ? WebGLEnum.INT : WebGLEnum.UNSIGNED_INT;\r\n }\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, buffer.object!);\r\n this.context.readBuffer(fb ? WebGLEnum.COLOR_ATTACHMENT0 + index : WebGLEnum.COLOR_ATTACHMENT0);\r\n this.context.readPixels(x, y, w, h, glFormat, glType, 0);\r\n this.context.bindBuffer(WebGLEnum.PIXEL_PACK_BUFFER, null);\r\n }\r\n looseContext() {\r\n if (!this.context.isContextLost()) {\r\n this._loseContextExtension?.loseContext();\r\n }\r\n }\r\n restoreContext() {\r\n if (this.context.isContextLost()) {\r\n this.clearErrors();\r\n this._loseContextExtension?.restoreContext();\r\n const err = this.getError();\r\n if (err) {\r\n console.error(err);\r\n }\r\n }\r\n }\r\n beginCapture() {\r\n if (this._captureRenderBundle) {\r\n throw new Error('Device.beginCapture() failed: device is already capturing draw commands');\r\n }\r\n this._captureRenderBundle = [];\r\n }\r\n endCapture() {\r\n if (!this._captureRenderBundle) {\r\n throw new Error('Device.endCapture() failed: device is not capturing draw commands');\r\n }\r\n const result = this._captureRenderBundle;\r\n this._captureRenderBundle = null;\r\n return result;\r\n }\r\n protected _executeRenderBundle(renderBundle: RenderBundle): number {\r\n for (const drawcall of renderBundle as WebGLRenderBundle) {\r\n this.setProgram(drawcall.program);\r\n this.setVertexLayout(drawcall.vertexLayout);\r\n this.setRenderStates(drawcall.renderStateSet);\r\n for (let i = 0; i < 4; i++) {\r\n this.setBindGroup(i, drawcall.bindGroups[i], drawcall.bindGroupOffsets[i]);\r\n }\r\n if (drawcall.numInstances === 0) {\r\n this.draw(drawcall.primitiveType, drawcall.first, drawcall.count);\r\n } else {\r\n this.drawInstanced(drawcall.primitiveType, drawcall.first, drawcall.count, drawcall.numInstances);\r\n }\r\n }\r\n return (renderBundle as WebGLRenderBundle).length;\r\n }\r\n /** @internal */\r\n protected _setFramebuffer(rt: FrameBuffer) {\r\n if (rt !== this._context._currentFramebuffer) {\r\n this._context._currentFramebuffer?.unbind();\r\n rt?.bind();\r\n }\r\n }\r\n /** @internal */\r\n protected onBeginFrame() {\r\n if (this._contextLost) {\r\n if (!this._context.isContextLost()) {\r\n this._contextLost = false;\r\n this.handleContextRestored();\r\n }\r\n }\r\n return !this._contextLost;\r\n }\r\n nextFrame(callback: () => void) {\r\n return requestAnimationFrame(callback);\r\n }\r\n cancelNextFrame(handle: number) {\r\n cancelAnimationFrame(handle);\r\n }\r\n /** @internal */\r\n protected onEndFrame() {}\r\n /** @internal */\r\n protected _draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n if (this._currentVertexData) {\r\n this._currentVertexData.bind();\r\n if (this._currentProgram) {\r\n if (!this._currentProgram.use()) {\r\n return;\r\n }\r\n for (let i = 0; i < this._currentProgram.bindGroupLayouts.length; i++) {\r\n const bindGroup = this._currentBindGroups[i];\r\n if (bindGroup) {\r\n const offsets = this._currentBindGroupOffsets[i];\r\n bindGroup.apply(this._currentProgram, offsets);\r\n } else {\r\n console.error(\r\n `Missing bind group (${i}) when drawing with program '${this._currentProgram.name}'`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n if (this._currentStateSet) {\r\n this._currentStateSet.apply();\r\n } else {\r\n WebGLRenderStateSet.applyDefaults(this._context);\r\n }\r\n const indexBuffer = this._currentVertexData.indexBuffer;\r\n if (indexBuffer) {\r\n this.context.drawElements(\r\n primitiveTypeMap[primitiveType],\r\n count,\r\n typeMap[indexBuffer.indexType.primitiveType],\r\n first * (indexBuffer.indexType === typeU16 ? 2 : 4)\r\n );\r\n } else {\r\n this.context.drawArrays(primitiveTypeMap[primitiveType], first, count);\r\n }\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (this.getFramebuffer() as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n if (this._captureRenderBundle) {\r\n const rs = this._currentStateSet?.clone() ?? this.createRenderStateSet();\r\n if (this._reverseWindingOrder) {\r\n const rasterState = rs.rasterizerState;\r\n if (!rasterState) {\r\n rs.useRasterizerState().setCullMode('front');\r\n } else if (rasterState.cullMode === 'back') {\r\n rasterState.cullMode = 'front';\r\n } else if (rasterState.cullMode === 'front') {\r\n rasterState.cullMode = 'back';\r\n }\r\n }\r\n this._captureRenderBundle.push({\r\n bindGroups: [...this._currentBindGroups],\r\n bindGroupOffsets: this._currentBindGroupOffsets.map((val) => (val ? [...val] : null)),\r\n program: this._currentProgram,\r\n vertexLayout: this._currentVertexData,\r\n primitiveType: primitiveType,\r\n renderStateSet: rs,\r\n count,\r\n first,\r\n numInstances: 0\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected _drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n if (this.instancedArraysExt && this._currentVertexData) {\r\n this._currentVertexData.bind();\r\n if (this._currentProgram) {\r\n if (!this._currentProgram.use()) {\r\n return;\r\n }\r\n for (let i = 0; i < this._currentProgram.bindGroupLayouts.length; i++) {\r\n const bindGroup = this._currentBindGroups[i];\r\n if (bindGroup) {\r\n const offsets = this._currentBindGroupOffsets[i];\r\n bindGroup.apply(this._currentProgram, offsets);\r\n } else {\r\n console.error(\r\n `Missing bind group (${i}) when drawing with program '${this._currentProgram.name}'`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n this._currentStateSet?.apply();\r\n const indexBuffer = this._currentVertexData.indexBuffer;\r\n if (indexBuffer) {\r\n this.instancedArraysExt.drawElementsInstanced(\r\n primitiveTypeMap[primitiveType],\r\n count,\r\n typeMap[indexBuffer.indexType.primitiveType],\r\n first * (indexBuffer.indexType === typeU16 ? 2 : 4),\r\n numInstances\r\n );\r\n } else {\r\n this.instancedArraysExt.drawArraysInstanced(\r\n primitiveTypeMap[primitiveType],\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.tagDraw();\r\n (this._context._currentFramebuffer as WebGLFrameBuffer)?.invalidateMipmaps();\r\n }\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.push({\r\n bindGroups: [...this._currentBindGroups],\r\n bindGroupOffsets: this._currentBindGroupOffsets.map((val) => (val ? [...val] : null)),\r\n program: this._currentProgram,\r\n vertexLayout: this._currentVertexData,\r\n primitiveType: primitiveType,\r\n renderStateSet: this._currentStateSet?.clone() ?? null,\r\n count,\r\n first,\r\n numInstances\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n throw new Error('WebGL device does not support compute shader');\r\n }\r\n /** @internal */\r\n private createInstancedArraysEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n vertexAttribDivisor: gl.vertexAttribDivisor.bind(gl),\r\n drawArraysInstanced: gl.drawArraysInstanced.bind(gl),\r\n drawElementsInstanced: gl.drawElementsInstanced.bind(gl)\r\n };\r\n } else {\r\n const extInstancedArray: Nullable<ANGLE_instanced_arrays> = gl.getExtension('ANGLE_instanced_arrays');\r\n return extInstancedArray\r\n ? {\r\n vertexAttribDivisor: extInstancedArray.vertexAttribDivisorANGLE.bind(extInstancedArray),\r\n drawArraysInstanced: extInstancedArray.drawArraysInstancedANGLE.bind(extInstancedArray),\r\n drawElementsInstanced: extInstancedArray.drawElementsInstancedANGLE.bind(extInstancedArray)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private createDrawBuffersEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n drawBuffers: gl.drawBuffers.bind(gl)\r\n };\r\n } else {\r\n const extDrawBuffers: Nullable<WEBGL_draw_buffers> = gl.getExtension('WEBGL_draw_buffers');\r\n return extDrawBuffers\r\n ? {\r\n drawBuffers: extDrawBuffers.drawBuffersWEBGL.bind(extDrawBuffers)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private createVertexArrayObjectEXT() {\r\n const gl = this._context;\r\n if (isWebGL2(gl)) {\r\n return {\r\n createVertexArray: gl.createVertexArray.bind(gl),\r\n bindVertexArray: gl.bindVertexArray.bind(gl),\r\n deleteVertexArray: gl.deleteVertexArray.bind(gl),\r\n isVertexArray: gl.isVertexArray.bind(gl)\r\n };\r\n } else {\r\n const extVAO: Nullable<OES_vertex_array_object> = gl.getExtension('OES_vertex_array_object');\r\n return extVAO\r\n ? {\r\n createVertexArray: extVAO.createVertexArrayOES.bind(extVAO),\r\n bindVertexArray: extVAO.bindVertexArrayOES.bind(extVAO),\r\n deleteVertexArray: extVAO.deleteVertexArrayOES.bind(extVAO),\r\n isVertexArray: extVAO.isVertexArrayOES.bind(extVAO)\r\n }\r\n : null;\r\n }\r\n }\r\n /** @internal */\r\n private handleContextLost() {\r\n this._isRendering = this.isRendering;\r\n this.invalidateAll();\r\n this.dispatchEvent('devicelost');\r\n }\r\n /** @internal */\r\n private handleContextRestored() {\r\n console.info('handle context restored');\r\n this.initContextState();\r\n this._textureSamplerMap = new WeakMap();\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n this._currentScissorRect = {\r\n x: 0,\r\n y: 0,\r\n width: this.deviceXToScreen(this.canvas.width),\r\n height: this.deviceYToScreen(this.canvas.height),\r\n default: true\r\n };\r\n\r\n this._samplerCache = new SamplerCache(this);\r\n if (this._isRendering) {\r\n this._isRendering = false;\r\n this.reloadAll();\r\n this.dispatchEvent('devicerestored');\r\n }\r\n }\r\n /** @internal */\r\n private initContextState() {\r\n this._deviceCaps = {\r\n miscCaps: new WebGLMiscCaps(this._context),\r\n framebufferCaps: new WebGLFramebufferCaps(this._context),\r\n shaderCaps: new WebGLShaderCaps(this._context),\r\n textureCaps: new WebGLTextureCaps(this._context)\r\n };\r\n this._vaoExt = this.createVertexArrayObjectEXT();\r\n this._instancedArraysExt = this.createInstancedArraysEXT();\r\n this._drawBuffersExt = this.createDrawBuffersEXT();\r\n this._context.pixelStorei(WebGLEnum.UNPACK_COLORSPACE_CONVERSION_WEBGL, WebGLEnum.NONE);\r\n this._context.pixelStorei(WebGLEnum.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n this._context.enable(WebGLEnum.SCISSOR_TEST);\r\n this.enableGPUTimeRecording(true);\r\n this._context._currentFramebuffer = undefined;\r\n this._context._currentProgram = undefined;\r\n this._deviceUniformBuffers = [];\r\n this._deviceUniformBufferOffsets = [];\r\n this._bindTextures = {\r\n [WebGLEnum.TEXTURE_2D]: [],\r\n [WebGLEnum.TEXTURE_CUBE_MAP]: [],\r\n [WebGLEnum.TEXTURE_3D]: [],\r\n [WebGLEnum.TEXTURE_2D_ARRAY]: []\r\n };\r\n this._bindSamplers = [];\r\n }\r\n /** @internal */\r\n clearErrors() {\r\n while (this._context.getError()) {\r\n // eat errors\r\n }\r\n }\r\n /** @internal */\r\n getCurrentSamplerForTexture(tex: BaseTexture) {\r\n return this._textureSamplerMap.get(tex);\r\n }\r\n /** @internal */\r\n setCurrentSamplerForTexture(tex: BaseTexture, sampler: Nullable<WebGLTextureSampler>) {\r\n this._textureSamplerMap.set(tex, sampler);\r\n }\r\n getError(throwError?: boolean) {\r\n const errcode = this._context.getError();\r\n const err = errcode === WebGLEnum.NO_ERROR ? null : new WebGLError(errcode);\r\n if (err && throwError) {\r\n throw err;\r\n }\r\n return err;\r\n }\r\n}\r\n\r\nlet webGL1Supported: Nullable<boolean> = null;\r\nlet webGL2Supported: Nullable<boolean> = null;\r\nconst factory = makeObservable(WebGLDevice)<DeviceEventMap>();\r\n\r\nasync function createWebGLDevice(\r\n backend: DeviceBackend,\r\n cvs: HTMLCanvasElement,\r\n options?: DeviceOptions\r\n): Promise<Nullable<AbstractDevice>> {\r\n try {\r\n const device = new factory(backend, cvs, options);\r\n await device.initContext();\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n return device;\r\n } catch (err) {\r\n console.error(err);\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const backend1: DeviceBackend = {\r\n typeName() {\r\n return 'webgl';\r\n },\r\n async supported() {\r\n if (webGL1Supported === null) {\r\n const cvs = document.createElement('canvas');\r\n const gl = cvs.getContext('webgl');\r\n webGL1Supported = !!gl;\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n return webGL1Supported;\r\n },\r\n async createDevice(cvs, options?) {\r\n return createWebGLDevice(this, cvs, options);\r\n }\r\n};\r\n\r\n/** @internal */\r\nexport const backend2: DeviceBackend = {\r\n typeName() {\r\n return 'webgl2';\r\n },\r\n async supported() {\r\n if (webGL2Supported === null) {\r\n const cvs = document.createElement('canvas');\r\n const gl = cvs.getContext('webgl2');\r\n webGL2Supported = !!gl;\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n }\r\n return webGL2Supported;\r\n },\r\n async createDevice(cvs, options?) {\r\n return createWebGLDevice(this, cvs, options);\r\n }\r\n};\r\n","/**\r\n * The WebGL/WebGL2 device backend for zephyr3d project\r\n *\r\n * @module backend-webgl\r\n * @packageDocumentation\r\n */\r\nimport { backend1, backend2 } from './device_webgl';\r\n\r\n/**\r\n * The WebGL1 backend\r\n * @public\r\n */\r\nexport const backendWebGL1 = backend1;\r\n\r\n/**\r\n * The WebGL2 backend\r\n * @public\r\n */\r\nexport const backendWebGL2 = backend2;\r\n"],"names":["WebGLEnum","isWebGL2","gl","texStorage2D","WebGLError","Error","errorToString","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","code","blendEquationMap","add","FUNC_ADD","subtract","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","max","FUNC_MAX","min","FUNC_MIN","blendEquationInvMap","blendFuncMap","zero","ZERO","one","ONE","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","BLEND","DST_ALPHA","ONE_MINUS_DST_ALPHA","SRC_COLOR","ONE_MINUS_SRC_COLOR","DST_COLOR","ONE_MINUS_DST_COLOR","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","blendFuncInvMap","SRC_ALPHA_SATURATE","faceModeMap","none","NONE","front","FRONT","back","BACK","faceModeInvMap","cw","CW","ccw","CCW","stencilOpMap","keep","KEEP","replace","REPLACE","incr","INCR","INCR_WRAP","decr","DECR","DECR_WRAP","invert","INVERT","stencilOpInvMap","compareFuncMap","always","ALWAYS","le","LEQUAL","ge","GEQUAL","lt","LESS","gt","GREATER","eq","EQUAL","ne","NOTEQUAL","never","NEVER","compareFuncInvMap","textureWrappingMap","repeat","REPEAT","MIRRORED_REPEAT","clamp","CLAMP_TO_EDGE","typeMap","PBPrimitiveType","BOOL","BVEC2","BOOL_VEC2","BVEC3","BOOL_VEC3","BVEC4","BOOL_VEC4","F32","FLOAT","F32VEC2","FLOAT_VEC2","F32VEC3","FLOAT_VEC3","F32VEC4","FLOAT_VEC4","I8","BYTE","I16","SHORT","I32","INT","I32VEC2","INT_VEC2","I32VEC3","INT_VEC3","I32VEC4","INT_VEC4","U8","UNSIGNED_BYTE","U8_NORM","I8_NORM","U16","UNSIGNED_SHORT","U16_NORM","I16_NORM","U32","UNSIGNED_INT","U32VEC2","UNSIGNED_INT_VEC2","U32VEC3","UNSIGNED_INT_VEC3","U32VEC4","UNSIGNED_INT_VEC4","primitiveTypeMap","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","POINTS","textureTargetMap","TEXTURE_2D","TEXTURE_3D","cube","TEXTURE_CUBE_MAP","TEXTURE_2D_ARRAY","cubeMapFaceMap","CubeFace","PX","TEXTURE_CUBE_MAP_POSITIVE_X","NX","TEXTURE_CUBE_MAP_NEGATIVE_X","PY","TEXTURE_CUBE_MAP_POSITIVE_Y","NY","TEXTURE_CUBE_MAP_NEGATIVE_Y","PZ","TEXTURE_CUBE_MAP_POSITIVE_Z","NZ","TEXTURE_CUBE_MAP_NEGATIVE_Z","textureMagFilterToWebGL","magFilter","NEAREST","LINEAR","textureMinFilterToWebGL","minFilter","mipFilter","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","_uniqueId","WebGLGPUObject","Disposable","_device","_object","_uid","_cid","_name","_restoreHandler","device","genDefaultName","addGPUObject","object","restoreHandler","handler","uid","cid","name","val","lastName","dispatchEvent","isVertexLayout","isFramebuffer","isSampler","isTexture","isTexture2D","isTexture2DArray","isTexture3D","isTextureCube","isTextureVideo","isProgram","isBuffer","isBindGroup","reload","disposed","restoreObject","destroy","restore","onDispose","disposeObject","WebGLBaseTexture","_target","_memCost","_flags","_width","_height","_depth","_format","_mipLevelCount","_samplerOptions","_webgl1fallback","_readFrameBuffers","target","width","height","depth","memCost","format","mipLevelCount","samplerOptions","options","params","getTextureCaps","getTextureFormatInfo","Object","assign","_getSamplerOptions","compare","console","log","isWebGL1Fallback","isFilterable","filterable","isPowerOf2","context","deleteTexture","invalidateBindingTextures","updateVideoMemoryCost","x","fb","dispose","isContextLost","init","getDeviceCaps","textureCaps","isSRGBFormat","isSRGBTextureFormat","isFloatFormat","isFloatTextureFormat","isIntegerFormat","isIntegerTextureFormat","isSignedFormat","isSignedTextureFormat","isCompressedFormat","isCompressedTextureFormat","isDepth","hasDepthChannel","getDefaultSampler","shadow","createSampler","_getFramebufferForRead","faceOrLevel","mipLevel","faceFramebuffers","framebuffer","createFrameBuffer","setColorAttachmentCubeFace","setColorAttachmentLayer","setColorAttachmentMipLevel","setColorAttachmentGenerateMipmaps","allocInternal","numMipLevels","setCurrentSamplerForTexture","_calcMipLevelCount","size","Math","autoMipLevelCount","floor","log2","Number","isInteger","obj","runNextFrame","createTexture","bindTexture","glInternalFormat","texStorage3D","texParameteri","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","w","h","isCompressed","blockWidth","getTextureFormatBlockWidth","blockHeight","getTextureFormatBlockHeight","blockSize","getTextureFormatBlockSize","mip","data","Uint8Array","ceil","fill","face","faceTarget","compressedTexImage2D","texImage2D","glFormat","glType","k","calcMemoryUsage","GPUResourceUsageFlags","TF_NO_MIPMAP","renderable","comparison","addressU","addressV","addressW","lodMin","lodMax","maxAnisotropy","WebGLTexture2D","loadEmpty","update","xOffset","yOffset","pixelStorei","UNPACK_ALIGNMENT","texSubImage2D","generateMipmaps","updateFromElement","y","cvs","document","createElement","ctx","getContext","drawImage","readPixels","buffer","pushDeviceStates","setFramebuffer","result","popDeviceStates","readPixelsToBuffer","loadFromElement","element","sRGB","creationFlags","TF_WRITABLE","error","loadImage","createEmpty","generateMipmap","createWithMipmapData","isCubemap","isVolume","loadLevels","levels","linearTextureFormatToSRGB","swizzle","mipLevels","supportS3TCSRGB","supportS3TC","warn","clearErrors","i","compressedTexSubImage2D","mipDatas","j","t","err","getError","WebGLTexture2DArray","zOffset","texSubImage3D","arraySize","layer","length","compressedTexSubImage3D","layerIndex","WebGLTexture3D","WebGLTextureCube","WebGLTextureVideo","_source","_callbackId","source","cancelVideoFrameCallback","loadElement","el","_x","_y","_w","_h","_faceOrLayer","_mipLevel","_buffer","updateVideoFrame","currentTime","requestVideoFrameCallback","videoWidth","videoHeight","that","cb","WebGLVertexLayout","_vertexData","_dirty","VertexData","vb","vertexBuffers","setVertexBuffer","stepMode","indexBuffer","setIndexBuffer","load","vaoExt","deleteVertexArray","setDrawOffset","byteOffset","info","drawOffset","getVertexBuffer","semantic","getVertexBufferInfo","getIndexBuffer","bind","bindVertexArray","bindBuffers","draw","primitiveType","first","count","setVertexLayout","drawInstanced","numInstances","createVertexArray","loc","bufferInfo","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","instancedArraysExt","vertexAttribPointer","type","cols","scalarType","normalized","stride","offset","vertexAttribDivisor","disableVertexAttribArray","ELEMENT_ARRAY_BUFFER","WebGLGPUBuffer","_size","_usage","_systemMemoryBuffer","_systemMemory","usage","systemMemory","BF_VERTEX","BF_INDEX","BF_UNIFORM","DYNAMIC","MANAGED","byteLength","set","systemMemoryBuffer","bufferSubData","dstByteOffset","srcPos","srcLength","BYTES_PER_ELEMENT","subarray","UNIFORM_BUFFER","BF_READ","BF_WRITE","COPY_WRITE_BUFFER","BF_PACK_PIXEL","BF_UNPACK_PIXEL","PIXEL_PACK_BUFFER","getBufferSubData","dstBuffer","offsetInBytes","sizeInBytes","_getBufferData","sync","fenceSync","SYNC_GPU_COMMANDS_COMPLETE","clientWaitAsync","deleteSync","COPY_READ_BUFFER","PIXEL_UNPACK_BUFFER","deleteBuffer","createBuffer","DYNAMIC_DRAW","STATIC_DRAW","STREAM_READ","bufferData","flags","interval_ms","Promise","resolve","reject","test","res","clientWaitSync","WAIT_FAILED","TIMEOUT_EXPIRED","setTimeout","typeU16","PBPrimitiveTypeInfo","getCachedTypeInfo","typeU32","WebGLIndexBuffer","indexType","Uint16Array","Uint32Array","STATUS_UNCHECKED","STATUS_OK","STATUS_FAILED","WebGLFrameBuffer","_options","_needBindBuffers","_drawTags","_lastDrawTag","_status","_statusAA","_isMRT","_drawBuffers","_hash","_needGenerateMipmaps","_depthAttachmentTarget","_colorAttachmentsAA","_depthAttachmentAA","_intermediateAttachments","_framebufferAA","_initialized","colorAttachments","depthAttachment","opt","findIndex","map","value","texture","level","sampleCount","ignoreDepthStencil","index","COLOR_ATTACHMENT0","hasStencilChannel","DEPTH_STENCIL_ATTACHMENT","DEPTH_ATTACHMENT","colorAttachmentHash","tex","join","depthAttachmentHash","tagDraw","isMRT","invalidateMipmaps","getWidth","attachment","getHeight","getHash","_init","deleteFramebuffer","rb","deleteRenderbuffer","entry","getColorAttachmentGenerateMipmaps","_currentFramebuffer","unbind","getColorAttachmentCubeFace","getColorAttachmentMipLevel","getColorAttachmentLayer","setDepthAttachmentCubeFace","getDepthAttachmentCubeFace","setDepthAttachmentLayer","getDepthAttachmentLayer","getDepthAttachment","getColorAttachments","getColorAttachment","_bindBuffersAA","_bindBuffers","bindFramebuffer","FRAMEBUFFER","drawBuffersExt","drawBuffers","setViewport","setScissor","_updateMSAABuffer","get","tmpFramebuffer","createFramebuffer","framebufferTexture2D","copyTexSubImage2D","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","depthStencilMask","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","readBuffer","blitFramebuffer","COLOR_BUFFER_BIT","_load","_bindAttachment","intermediateTexture","framebufferCaps","supportRenderMipmap","Map","intermediateAttachments","formatInfo","activeTexture","TEXTURE0","framebufferTextureLayer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","_createRenderbufferAA","renderBuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorageMultisample","framebufferRenderbuffer","supportMultisampledFramebuffer","getSampleCount","WebGLRenderState","_defaultState","_currentState","apply","force","c","_apply","defaultState","applyDefaults","WebGLColorState","redMask","greenMask","blueMask","alphaMask","clone","setColorMask","r","g","b","a","colorMask","WebGLBlendingState","_srcBlendRGB","_dstBlendRGB","_srcBlendAlpha","_dstBlendAlpha","_rgbEquation","_alphaEquation","enabled","alphaToCoverageEnabled","srcBlendRGB","dstBlendRGB","srcBlendAlpha","dstBlendAlpha","rgbEquation","alphaEquation","other","enable","enableAlphaToCoverage","setBlendFuncRGB","setBlendFuncAlpha","setBlendEquation","setBlendFunc","src","dest","rgb","alpha","blendEquationSeparate","blendFunc","blendFuncSeparate","disable","SAMPLE_ALPHA_TO_COVERAGE","WebGLRasterizerState","_cullMode","cullMode","setCullMode","mode","depthClampEnabled","enableDepthClamp","CULL_FACE","cullFace","WebGLDepthState","testEnabled","writeEnabled","depthBias","depthBiasSlopeScale","_compareFunc","compareFunc","enableTest","enableWrite","setCompareFunc","setDepthBias","setDepthBiasSlopeScale","func","DEPTH_TEST","depthFunc","depthMask","POLYGON_OFFSET_FILL","polygonOffset","WebGLStencilState","writeMask","ref","readMask","_failOp","_failOpBack","_zFailOp","_zFailOpBack","_passOp","_passOpBack","_func","_funcBack","failOp","failOpBack","zFailOp","zFailOpBack","passOp","passOpBack","funcBack","setWriteMask","setFrontOp","setBackOp","setFrontCompareFunc","setBackCompareFunc","setReference","setReadMask","mask","fail","zfail","zpass","STENCIL_TEST","stencilMaskSeparate","stencilFuncSeparate","stencilOpSeparate","WebGLRenderStateSet","_gl","colorState","blendingState","rasterizerState","depthState","stencilState","newStateSet","copyFrom","stateSet","useColorState","state","defaultColorState","useBlendingState","defaultBlendingState","useRasterizerState","defaultRasterizerState","useDepthState","defaultDepthState","useStencilState","defaultStencilState","GPU_DISJOINT_EXT","TIME_ELAPSED_EXT","GPUTimer","_query","_state","_timerQuery","_gpuTime","ext","getExtension","createQuery","deleteQuery","beginQuery","endQuery","isQuery","getQuery","getQueryObject","getQueryParameter","queryCounter","queryCounterEXT","createQueryEXT","deleteQueryEXT","beginQueryEXT","endQueryEXT","isQueryEXT","getQueryEXT","getQueryObjectEXT","gpuTimerSupported","begin","end","ended","elapsed","QUERY_RESULT_AVAILABLE","gpuTimerDisjoint","getParameter","QUERY_RESULT","WebGLFramebufferCaps","_isWebGL2","_extDrawBuffers","_extFloatBlending","_extRenderMipmap","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","MAX_COLOR_ATTACHMENTS","MAX_DRAW_BUFFERS","WebGLMiscCaps","_extIndexUint32","_extBlendMinMax","supportOversizedViewport","supportBlendMinMax","support32BitIndex","supportDepthClamp","maxBindGroups","maxTexCoordIndex","WebGLShaderCaps","_extFragDepth","_extStandardDerivatives","_extShaderTextureLod","supportFragmentDepth","supportStandardDerivatives","supportShaderTextureLod","supportHighPrecisionFloat","maxUniformBufferSize","uniformBufferOffsetAlignment","maxStorageBufferSize","storageBufferOffsetAlignment","MAX_UNIFORM_BLOCK_SIZE","UNIFORM_BUFFER_OFFSET_ALIGNMENT","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","precision","FRAGMENT_SHADER","WebGLTextureCaps","_extS3TC","_extS3TCSRGB","_extBPTC","_extRGTC","_extASTC","_extTextureFilterAnisotropic","_extDepthTexture","_extSRGB","_extTextureFloat","_extTextureFloatLinear","_extTextureHalfFloat","_extTextureHalfFloatLinear","_textureFormatInfos","maxTextureSize","maxCubeTextureSize","npo2Mipmapping","npo2Repeating","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","rgba8unorm","RGBA","RGBA8","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","compressed","split","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","RED","R8","R8_SNORM","R16F","HALF_FLOAT","R32F","RED_INTEGER","R8UI","R8I","R16UI","R16I","R32UI","R32I","RG","RG8","RG8_SNORM","RG16F","RG32F","RG8UI","RG8I","RG16UI","RG16I","RG32UI","RG32I","SRGB8_ALPHA8","RGBA8_SNORM","RGBA16F","RGBA32F","RGBA_INTEGER","RGBA8UI","RGBA8I","RGBA16UI","RGBA16I","RGBA32UI","RGBA32I","RGB","R11F_G11F_B10F","UNSIGNED_INT_10F_11F_11F_REV","DEPTH_COMPONENT","DEPTH_COMPONENT16","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","DEPTH_STENCIL","DEPTH24_STENCIL8","UNSIGNED_INT_24_8","DEPTH32F_STENCIL8","FLOAT_32_UNSIGNED_INT_24_8_REV","SRGB_ALPHA","numPixels","WebGLStructuredBuffer","_structure","_data","structure","isStructType","structMembers","isArrayType","isValidArrayElementType","elementType","layout","toBufferLayout","byteSize","useSystemMemory","StructuredBufferData","st","isCompatibleType","getUniformData","isPrimitiveType","isMatrixType","member","WebGLBindGroup","_layout","_dynamicOffsets","_resources","_createdBuffers","entries","hasDynamicOffset","dynamicOffsetIndex","getGPUId","String","getLayout","getBuffer","nocreate","_getBuffer","getDynamicOffsets","setBuffer","_bindOffset","_bindSize","bindName","nameMap","setRawData","mappedName","setValue","setTextureView","_value","_level","_face","_mipCount","_sampler","getTexture","_findTextureLayout","setTexture","sampler","autoBindSamplerComparison","setSampler","program","offsets","webgl2","dynamicOffsets","setBlock","structName","setUniform","uniforms","Array","isArray","createStructuredBuffer","push","storageTexture","externalTexture","WebGLGPUProgram","_vs","_fs","_unitCounter","_uniformSetters","_uniformInfo","_blockInfo","_bindGroupLayouts","_vertexAttributes","_error","_vertexShader","_fragmentShader","vertexShader","fragmentShader","bindGroupLayouts","vertexAttributes","createProgram","getCompileError","getShaderSource","kind","getBindingInfo","group","binding","bindingPoint","setter","proto","getPrototypeOf","_setUniformStruct","_setUniformArray","bindUniformBuffer","deleteProgram","use","_currentProgram","checkLoad","createUniformBuffer","uniform","createShader","attachShader","shaderSource","compileShader","semanticList","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","getProgramInfoLog","deleteShader","useProgram","createUniformSetters","createUniformSetter","location","getUniformSetterfv","getUniformSetter2fv","getUniformSetter3fv","getUniformSetter4fv","getUniformSetteriv","getUniformSetter2iv","getUniformSetter3iv","getUniformSetter4iv","getUniformSetteruiv","getUniformSetter2uiv","getUniformSetter3uiv","getUniformSetter4uiv","FLOAT_MAT2","getUniformSetterMatrix2","FLOAT_MAT2x3","getUniformSetterMatrix23","FLOAT_MAT2x4","getUniformSetterMatrix24","FLOAT_MAT3","getUniformSetterMatrix3","FLOAT_MAT3x2","getUniformSetterMatrix32","FLOAT_MAT3x4","getUniformSetterMatrix34","FLOAT_MAT4","getUniformSetterMatrix4","FLOAT_MAT4x2","getUniformSetterMatrix42","FLOAT_MAT4x3","getUniformSetterMatrix43","SAMPLER_2D","SAMPLER_2D_SHADOW","INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_2D","unit","uniform1i","getSamplerSetter","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D_ARRAY","SAMPLER_CUBE","SAMPLER_CUBE_SHADOW","INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_CUBE","SAMPLER_3D","INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_3D","uniformSetters","numUniforms","ACTIVE_UNIFORMS","getActiveUniform","startsWith","substr","blockIndex","getUniformLocation","view","ctor","viewCtor","elementSize","viewElementSize","getTypedArrayInfo","uniformInfo","numBlocks","ACTIVE_UNIFORM_BLOCKS","getActiveUniformBlockName","getUniformBlockIndex","usedInVS","getActiveUniformBlockParameter","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","usedInFS","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","used","UNIFORM_BLOCK_DATA_SIZE","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformBlockBinding","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformMatrix2fv","uniformMatrix2x3fv","uniformMatrix2x4fv","uniformMatrix3x2fv","uniformMatrix3fv","uniformMatrix3x4fv","uniformMatrix4x2fv","uniformMatrix4x3fv","uniformMatrix4fv","Int32Array","Float32Array","WebGLTextureSampler","addressModeU","addressModeV","addressModeW","deleteSampler","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","texParameterf","TEXTURE_MAX_ANISOTROPY","samplerParameteri","TEXTURE_WRAP_R","samplerParameterf","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","TEXTURE_COMPARE_FUNC","SamplerCache","_samplers","fetchSampler","hash","tempInt32Array","tempUint32Array","WebGLDevice","BaseDevice","_context","_msaaSampleCount","_loseContextExtension","_contextLost","_isRendering","_reverseWindingOrder","_deviceCaps","_vaoExt","_instancedArraysExt","_drawBuffersExt","_currentVertexData","_currentStateSet","_currentBindGroups","_currentBindGroupOffsets","_currentViewport","_currentScissorRect","_samplerCache","_textureSamplerMap","_captureRenderBundle","_deviceUniformBuffers","_deviceUniformBufferOffsets","_bindTextures","_bindSamplers","_readFormats","_adapterInfo","backend","dpr","msaa","canvas","backend1","antialias","stencil","premultipliedAlpha","vendor","VENDOR","renderer","RENDERER","version","VERSION","deviceXToScreen","deviceYToScreen","default","WeakMap","addEventListener","evt","preventDefault","handleContextLost","handleContextRestored","getAdapterInfo","getFrameBufferSampleCount","getFramebuffer","drawingBufferWidth","getDrawingBufferWidth","drawingBufferHeight","getDrawingBufferHeight","clientWidth","clientHeight","getBackBufferWidth","getBackBufferHeight","samp","bindSampler","fallback","bindBufferRange","bindBufferBase","initContext","initContextState","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","style","clearFrameBuffer","clearColor","clearDepth","clearStencil","colorFlag","depthFlag","stencilFlag","clearBufferfi","attachments","clearBufferiv","COLOR","clearBufferuiv","clearBufferfv","clear","createGPUTimer","createRenderStateSet","createBlendingState","createColorState","createRasterizerState","createDepthState","createStencilState","createTextureFromMipmapData","parseTextureOptions","createTexture2D","createTexture2DFromImage","createTexture2DArray","createTexture2DArrayFromImages","elements","createTexture3D","createCubeTexture","createTextureVideo","copyFramebufferToTexture2D","dst","srcLevel","srcWidth","srcHeight","dstWidth","dstHeight","copyTexture2D","dstLevel","createGPUProgram","renderProgramParams","vs","fs","createBindGroup","parseBufferOptions","copyBuffer","sourceBuffer","destBuffer","srcOffset","dstOffset","bytes","copyBufferSubData","createIndexBuffer","structureType","createVertexLayout","depthAttachement","setBindGroup","bindGroup","bindGroupOffsets","getBindGroup","vp","undefined","viewport","screenXToDevice","screenYToDevice","getViewport","scissor","getScissor","setProgram","getProgram","vertexData","getVertexLayout","setRenderStates","getRenderStates","reverseVertexWindingOrder","reverse","frontFace","isWindingOrderReversed","flush","colorAttachment","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","pixelSize","stagingBuffer","managed","hasRedChannel","hasGreenChannel","hasBlueChannel","hasAlphaChannel","numChannels","integer","float","signed","RG_INTEGER","looseContext","loseContext","restoreContext","beginCapture","endCapture","_executeRenderBundle","renderBundle","drawcall","vertexLayout","renderStateSet","bindGroups","_setFramebuffer","rt","nextFrame","callback","requestAnimationFrame","cancelNextFrame","handle","cancelAnimationFrame","onEndFrame","drawElements","drawArrays","rs","rasterState","_drawInstanced","drawElementsInstanced","drawArraysInstanced","extInstancedArray","vertexAttribDivisorANGLE","drawArraysInstancedANGLE","drawElementsInstancedANGLE","extDrawBuffers","drawBuffersWEBGL","isVertexArray","extVAO","createVertexArrayOES","bindVertexArrayOES","deleteVertexArrayOES","isVertexArrayOES","isRendering","invalidateAll","reloadAll","miscCaps","shaderCaps","createVertexArrayObjectEXT","createInstancedArraysEXT","createDrawBuffersEXT","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","SCISSOR_TEST","enableGPUTimeRecording","getCurrentSamplerForTexture","throwError","errcode","webGL1Supported","webGL2Supported","factory","makeObservable","createWebGLDevice","typeName","supported","createDevice","backend2","backendWebGL1","backendWebGL2"],"mappings":"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"}