Interface ICGAPIResourceRepository

Interface defining the contract for Computer Graphics API Resource Repository implementations. This interface abstracts graphics resource management operations across different APIs (WebGL, WebGPU). Implementations handle creation, management, and deletion of graphics resources like textures, buffers, shaders, and framebuffers.

interface ICGAPIResourceRepository {
    allocateTexture(options: {
        format: TextureFormatEnum;
        height: number;
        mipLevelCount: number;
        width: number;
    }): number;
    attachColorBufferCubeToFrameBufferObject(framebuffer: FrameBuffer, attachmentIndex: number, faceIndex: number, mipLevel: number, renderable: IRenderable): void;
    attachColorBufferLayerToFrameBufferObject(framebuffer: FrameBuffer, attachmentIndex: number, renderable: IRenderable, layerIndex: number, mipLevel: number): void;
    attachColorBufferToFrameBufferObject(framebuffer: FrameBuffer, attachmentIndex: number, renderable: IRenderable): void;
    attachDepthBufferToFrameBufferObject(framebuffer: FrameBuffer, renderable: IRenderable): void;
    attachDepthStencilBufferToFrameBufferObject(framebuffer: FrameBuffer, renderable: IRenderable): void;
    attachStencilBufferToFrameBufferObject(framebuffer: FrameBuffer, renderable: IRenderable): void;
    clearFrameBuffer(renderPass: RenderPass): void;
    createCompressedTexture(textureDataArray: TextureData[], compressionTextureType: CompressionTextureTypeEnum): Promise<number>;
    createCompressedTextureFromBasis(basisFile: _BasisFile, options: {
        border: number;
        format: EnumIO;
        type: ComponentTypeEnum;
    }): number;
    createCubeTexture(mipLevelCount: number, images: {
        negX: DirectTextureData;
        negY: DirectTextureData;
        negZ: DirectTextureData;
        posX: DirectTextureData;
        posY: DirectTextureData;
        posZ: DirectTextureData;
    }[], width: number, height: number): [number, Sampler];
    createCubeTextureFromFiles(baseUri: string, mipLevelCount: number, isNamePosNeg: boolean, hdriFormat: EnumIO): Promise<[number, Sampler]>;
    createFrameBufferObject(): number;
    createIndexBuffer(accessor: Accessor): number;
    createRenderBuffer(width: number, height: number, internalFormat: TextureParameterEnum, isMSAA: boolean, sampleCountMSAA: number): number;
    createRenderTargetTexture(options: {
        format: TextureParameterEnum;
        height: number;
        mipLevelCount: number;
        width: number;
    }): number;
    createRenderTargetTextureArray(options: {
        arrayLength: number;
        format: EnumIO;
        height: number;
        internalFormat: TextureParameterEnum;
        level: number;
        type: ComponentTypeEnum;
        width: number;
    }): number;
    createRenderTargetTextureCube(options: {
        format: TextureParameterEnum;
        height: number;
        mipLevelCount: number;
        width: number;
    }): number;
    createShaderProgram(options: {
        attributeNames: AttributeNames;
        attributeSemantics: VertexAttributeEnum[];
        fragmentShaderStr: string;
        material: Material;
        onError?: ((message: string) => void);
        primitive: Primitive;
        vertexShaderStr: string;
    }): number;
    createTextureArray(width: number, height: number, arrayLength: number, mipLevelCount: number, internalFormat: TextureFormatEnum, format: EnumIO, type: ComponentTypeEnum, imageData: TypedArray): number;
    createTextureFromDataUri(dataUri: string, options: {
        border: number;
        format: EnumIO;
        generateMipmap: boolean;
        internalFormat: TextureParameterEnum;
        level: number;
        type: ComponentTypeEnum;
    }): Promise<number>;
    createTextureFromHTMLImageElement(imageData: HTMLImageElement, options: {
        border: number;
        format: EnumIO;
        generateMipmap: boolean;
        height: number;
        internalFormat: TextureParameterEnum;
        level: number;
        type: ComponentTypeEnum;
        width: number;
    }): Promise<number>;
    createTextureFromImageBitmapData(imageData: ImageBitmapData, options: {
        border: number;
        format: EnumIO;
        generateMipmap: boolean;
        height: number;
        internalFormat: TextureParameterEnum;
        level: number;
        type: ComponentTypeEnum;
        width: number;
    }): Promise<number>;
    createTextureSampler(options: {
        anisotropy: boolean;
        isPremultipliedAlpha?: boolean;
        magFilter: TextureParameterEnum;
        minFilter: TextureParameterEnum;
        shadowCompareMode: boolean;
        wrapR: TextureParameterEnum;
        wrapS: TextureParameterEnum;
        wrapT: TextureParameterEnum;
    }): number;
    createVertexBuffer(accessor: Accessor): number;
    createVertexBufferAndIndexBuffer(primitive: Primitive): VertexHandles;
    createVertexBufferFromTypedArray(typedArray: TypedArray): number;
    deleteFrameBufferObject(frameBufferObjectHandle: number): void;
    deleteRenderBuffer(renderBufferUid: number): void;
    deleteTexture(textureHandle: number): void;
    deleteVertexBuffer(resourceHandle: number): void;
    deleteVertexDataResources(vertexHandles: VertexHandles): void;
    generateMipmaps2d(textureHandle: number, width: number, height: number): void;
    generateMipmapsCube(textureHandle: number, width: number, height: number): void;
    getCanvasSize(): [number, number];
    getTexturePixelData(textureHandle: number, width: number, height: number, frameBufferUid: number, colorAttachmentIndex: number): Promise<Uint8Array>;
    isSupportMultiViewVRRendering(): boolean;
    loadImageToMipLevelOfTexture2D(options: {
        data: TypedArray;
        format: TextureFormatEnum;
        height: number;
        mipLevel: number;
        rowSizeByPixel: number;
        textureUid: number;
        type: ComponentTypeEnum;
        width: number;
        xOffset: number;
        yOffset: number;
    }): void;
    resizeCanvas(width: number, height: number): void;
    setVertexDataToPipeline(bufferHandles: {
        iboHandle?: number;
        vaoHandle: number;
        vboHandles: number[];
    }, primitive: Primitive, instanceIDBufferUid: number): void;
    setViewport(viewport?: Vector4): void;
    updateIndexBuffer(accessor: Accessor, resourceHandle: number): void;
    updateVertexBuffer(accessor: Accessor, resourceHandle: number): void;
    updateVertexBufferAndIndexBuffer(primitive: Primitive, vertexHandles: VertexHandles): void;
}

Implemented by

Methods

  • Allocates a texture with specified dimensions and format without initial data. This creates an empty texture that can be filled later or used as a render target.

    Parameters

    • options: {
          format: TextureFormatEnum;
          height: number;
          mipLevelCount: number;
          width: number;
      }

      Texture allocation parameters

      • format: TextureFormatEnum

        Internal texture format

      • height: number

        Texture height in pixels

      • mipLevelCount: number

        Number of mipmap levels to allocate

      • width: number

        Texture width in pixels

    Returns number

    The texture resource handle

  • Attaches a specific face of a cube texture as a color buffer to a framebuffer. This enables rendering to individual faces of cube textures.

    Parameters

    • framebuffer: FrameBuffer

      The target framebuffer

    • attachmentIndex: number

      Color attachment index (0-based)

    • faceIndex: number

      Cube face index (0-5)

    • mipLevel: number

      Mipmap level to attach

    • renderable: IRenderable

      The cube texture to attach

    Returns void

  • Attaches a specific layer of a texture array as a color buffer to a framebuffer. This enables layered rendering to texture arrays.

    Parameters

    • framebuffer: FrameBuffer

      The target framebuffer

    • attachmentIndex: number

      Color attachment index (0-based)

    • renderable: IRenderable

      The texture array to attach

    • layerIndex: number

      Index of the layer to attach

    • mipLevel: number

      Mipmap level to attach

    Returns void

  • Attaches a color buffer (texture or renderbuffer) to a framebuffer object. This allows the framebuffer to render color data to the attached buffer.

    Parameters

    • framebuffer: FrameBuffer

      The target framebuffer

    • attachmentIndex: number

      Color attachment index (0-based)

    • renderable: IRenderable

      The color buffer to attach

    Returns void

  • Attaches a depth buffer to a framebuffer object. The depth buffer stores per-pixel depth information for depth testing.

    Parameters

    Returns void

  • Attaches a combined depth-stencil buffer to a framebuffer object. This is more efficient than separate depth and stencil buffers when both are needed.

    Parameters

    Returns void

  • Attaches a stencil buffer to a framebuffer object. The stencil buffer enables stencil testing for advanced rendering effects.

    Parameters

    Returns void

  • Clears the framebuffer associated with the given render pass. This operation clears color, depth, and/or stencil buffers as configured in the render pass.

    Parameters

    • renderPass: RenderPass

      The render pass containing clear configuration

    Returns void

  • Creates a compressed texture from pre-transcoded texture data. This method handles already transcoded compressed texture data for multiple mipmap levels.

    Parameters

    Returns Promise<number>

    Promise resolving to the texture resource handle

  • Creates a compressed texture from a Basis Universal file. Basis Universal provides efficient texture compression that can be transcoded to various GPU-specific formats at runtime.

    Parameters

    • basisFile: _BasisFile

      The Basis Universal file containing compressed texture data

    • options: {
          border: number;
          format: EnumIO;
          type: ComponentTypeEnum;
      }

      Texture creation parameters

      • border: number

        Border width (typically 0)

      • format: EnumIO

        Target pixel format after transcoding

      • type: ComponentTypeEnum

        Component data type

    Returns number

    The texture resource handle

  • Creates a cube texture from image files with automatic loading. This method handles the loading and assembly of 6 cube faces from file sources.

    Parameters

    • baseUri: string

      Base URI for the cube texture files

    • mipLevelCount: number

      Number of mipmap levels to generate

    • isNamePosNeg: boolean

      Whether to use positive/negative naming convention

    • hdriFormat: EnumIO

      HDRI format specification for high dynamic range textures

    Returns Promise<[number, Sampler]>

    Promise resolving to a tuple of [texture handle, sampler]

  • Creates a framebuffer object for off-screen rendering. Framebuffers allow rendering to textures instead of the default screen buffer.

    Returns number

    The framebuffer object resource handle

  • Creates an index buffer from an accessor containing index data. Index buffers are used to define the order in which vertices are processed.

    Parameters

    • accessor: Accessor

      Accessor containing index data and metadata

    Returns number

    The index buffer resource handle

  • Creates a renderbuffer for use as a framebuffer attachment. Renderbuffers are optimized for use as render targets but cannot be sampled as textures.

    Parameters

    • width: number

      Renderbuffer width in pixels

    • height: number

      Renderbuffer height in pixels

    • internalFormat: TextureParameterEnum

      Internal format of the renderbuffer

    • isMSAA: boolean

      Whether to enable multi-sample anti-aliasing

    • sampleCountMSAA: number

      Number of MSAA samples (if MSAA is enabled)

    Returns number

    The renderbuffer resource handle

  • Creates a render target texture for off-screen rendering. This texture can be used as a color attachment in framebuffers for rendering operations.

    Parameters

    • options: {
          format: TextureParameterEnum;
          height: number;
          mipLevelCount: number;
          width: number;
      }

      Render target creation parameters

      • format: TextureParameterEnum

        Internal texture format

      • height: number

        Texture height in pixels

      • mipLevelCount: number

        Number of mipmap levels

      • width: number

        Texture width in pixels

    Returns number

    The render target texture resource handle

  • Creates a render target texture array for layered rendering. This allows rendering to multiple texture layers in a single pass.

    Parameters

    • options: {
          arrayLength: number;
          format: EnumIO;
          height: number;
          internalFormat: TextureParameterEnum;
          level: number;
          type: ComponentTypeEnum;
          width: number;
      }

      Render target array creation parameters

      • arrayLength: number

        Number of texture layers

      • format: EnumIO

        Pixel data format

      • height: number

        Texture height in pixels

      • internalFormat: TextureParameterEnum

        Internal texture format

      • level: number

        Mipmap level

      • type: ComponentTypeEnum

        Component data type

      • width: number

        Texture width in pixels

    Returns number

    The render target texture array resource handle

  • Creates a render target cube texture for environment mapping and shadow mapping. This allows rendering to all six faces of a cube texture.

    Parameters

    • options: {
          format: TextureParameterEnum;
          height: number;
          mipLevelCount: number;
          width: number;
      }

      Render target cube creation parameters

      • format: TextureParameterEnum

        Internal texture format

      • height: number

        Texture height in pixels

      • mipLevelCount: number

        Number of mipmap levels

      • width: number

        Texture width in pixels

    Returns number

    The render target cube texture resource handle

  • Creates a shader program from vertex and fragment shader source code. This method compiles, links, and validates the shader program for use in rendering.

    Parameters

    • options: {
          attributeNames: AttributeNames;
          attributeSemantics: VertexAttributeEnum[];
          fragmentShaderStr: string;
          material: Material;
          onError?: ((message: string) => void);
          primitive: Primitive;
          vertexShaderStr: string;
      }

      Shader program creation parameters

      • attributeNames: AttributeNames

        Names of vertex attributes

      • attributeSemantics: VertexAttributeEnum[]

        Semantic meanings of vertex attributes

      • fragmentShaderStr: string

        Fragment shader source code

      • material: Material

        Material that will use this shader program

      • OptionalonError?: ((message: string) => void)

        Optional error callback for compilation/linking errors

          • (message): void
          • Parameters

            • message: string

            Returns void

      • primitive: Primitive

        Primitive geometry that will be rendered with this shader

      • vertexShaderStr: string

        Vertex shader source code

    Returns number

    The shader program resource handle

  • Creates a texture array from provided image data. Texture arrays allow efficient rendering of multiple related textures.

    Parameters

    • width: number

      Texture width in pixels

    • height: number

      Texture height in pixels

    • arrayLength: number

      Number of textures in the array

    • mipLevelCount: number

      Number of mipmap levels

    • internalFormat: TextureFormatEnum

      Internal texture format

    • format: EnumIO

      Pixel data format

    • type: ComponentTypeEnum

      Component data type

    • imageData: TypedArray

      The texture data as a typed array

    Returns number

    The texture array resource handle

  • Creates a texture from a data URI string. This method decodes base64-encoded image data and creates a GPU texture.

    Parameters

    • dataUri: string

      The data URI string containing encoded image data

    • options: {
          border: number;
          format: EnumIO;
          generateMipmap: boolean;
          internalFormat: TextureParameterEnum;
          level: number;
          type: ComponentTypeEnum;
      }

      Texture creation parameters

      • border: number

        Border width (typically 0)

      • format: EnumIO

        Pixel data format

      • generateMipmap: boolean

        Whether to automatically generate mipmaps

      • internalFormat: TextureParameterEnum

        Internal texture format for GPU storage

      • level: number

        Mipmap level (typically 0 for base level)

      • type: ComponentTypeEnum

        Component data type

    Returns Promise<number>

    Promise resolving to the texture resource handle

  • Creates a texture from an HTML image element with specified parameters. This method handles the conversion of HTML image elements to GPU textures.

    Parameters

    • imageData: HTMLImageElement

      The HTML image element containing the texture data

    • options: {
          border: number;
          format: EnumIO;
          generateMipmap: boolean;
          height: number;
          internalFormat: TextureParameterEnum;
          level: number;
          type: ComponentTypeEnum;
          width: number;
      }

      Texture creation parameters

      • border: number

        Border width (typically 0)

      • format: EnumIO

        Pixel data format

      • generateMipmap: boolean

        Whether to automatically generate mipmaps

      • height: number

        Texture height in pixels

      • internalFormat: TextureParameterEnum

        Internal texture format for GPU storage

      • level: number

        Mipmap level (typically 0 for base level)

      • type: ComponentTypeEnum

        Component data type

      • width: number

        Texture width in pixels

    Returns Promise<number>

    Promise resolving to the texture resource handle

  • Creates a texture from image bitmap data with specified parameters. This method handles various image sources and converts them to GPU textures.

    Parameters

    • imageData: ImageBitmapData

      The source image data (HTMLImageElement, HTMLVideoElement, etc.)

    • options: {
          border: number;
          format: EnumIO;
          generateMipmap: boolean;
          height: number;
          internalFormat: TextureParameterEnum;
          level: number;
          type: ComponentTypeEnum;
          width: number;
      }

      Texture creation parameters

      • border: number

        Border width (typically 0)

      • format: EnumIO

        Pixel data format

      • generateMipmap: boolean

        Whether to automatically generate mipmaps

      • height: number

        Texture height in pixels

      • internalFormat: TextureParameterEnum

        Internal texture format for GPU storage

      • level: number

        Mipmap level (typically 0 for base level)

      • type: ComponentTypeEnum

        Component data type

      • width: number

        Texture width in pixels

    Returns Promise<number>

    Promise resolving to the texture resource handle

  • Creates a vertex buffer from an accessor containing vertex data. The accessor provides metadata about the data layout and type information.

    Parameters

    • accessor: Accessor

      Accessor containing vertex data and metadata

    Returns number

    The vertex buffer resource handle

  • Creates both vertex and index buffers for a primitive geometry. This is a convenience method that handles the creation of all necessary buffers for rendering a geometric primitive.

    Parameters

    • primitive: Primitive

      The primitive geometry containing vertex and index data

    Returns VertexHandles

    Object containing handles for all created vertex-related resources

  • Creates a vertex buffer directly from a typed array. This is a more direct approach when you have raw vertex data without accessor metadata.

    Parameters

    • typedArray: TypedArray

      The typed array containing vertex data

    Returns number

    The vertex buffer resource handle

  • Deletes a framebuffer object and frees associated resources.

    Parameters

    • frameBufferObjectHandle: number

      Handle to the framebuffer to delete

    Returns void

  • Deletes all vertex-related resources (vertex buffers, index buffers, VAOs). This method ensures proper cleanup of all resources associated with vertex data.

    Parameters

    • vertexHandles: VertexHandles

      Object containing handles to all vertex-related resources to delete

    Returns void

  • Generates mipmaps for a 2D texture. Mipmaps improve rendering quality and performance by providing pre-filtered texture versions.

    Parameters

    • textureHandle: number

      Handle to the texture

    • width: number

      Base texture width in pixels

    • height: number

      Base texture height in pixels

    Returns void

  • Generates mipmaps for a cube texture. This creates mipmaps for all six faces of the cube texture.

    Parameters

    • textureHandle: number

      Handle to the cube texture

    • width: number

      Base texture width in pixels

    • height: number

      Base texture height in pixels

    Returns void

  • Reads pixel data from a texture attached to a framebuffer. This allows CPU access to rendered texture data for analysis or processing.

    Parameters

    • textureHandle: number

      Handle to the texture to read from

    • width: number

      Width of the region to read

    • height: number

      Height of the region to read

    • frameBufferUid: number

      Handle to the framebuffer containing the texture

    • colorAttachmentIndex: number

      Index of the color attachment to read from

    Returns Promise<Uint8Array>

    Promise resolving to the pixel data as a Uint8Array

  • Checks if the current graphics API supports multi-view VR rendering. Multi-view rendering allows efficient stereo rendering for VR applications.

    Returns boolean

    True if multi-view VR rendering is supported, false otherwise

  • Loads image data to a specific mipmap level of an existing texture. This method allows for partial texture updates and mipmap level management.

    Parameters

    • options: {
          data: TypedArray;
          format: TextureFormatEnum;
          height: number;
          mipLevel: number;
          rowSizeByPixel: number;
          textureUid: number;
          type: ComponentTypeEnum;
          width: number;
          xOffset: number;
          yOffset: number;
      }

      Image loading parameters

      • data: TypedArray

        The actual image data as a typed array

      • format: TextureFormatEnum

        Format of the source image data

      • height: number

        Height of the image data to copy

      • mipLevel: number

        Target mipmap level

      • rowSizeByPixel: number

        Size of each row in pixels

      • textureUid: number

        Handle to the target texture

      • type: ComponentTypeEnum

        Data type of the source image

      • width: number

        Width of the image data to copy

      • xOffset: number

        X offset within the texture for the copy region

      • yOffset: number

        Y offset within the texture for the copy region

    Returns void

  • Resizes the canvas to the specified dimensions. This operation may trigger viewport adjustments and resource reallocation.

    Parameters

    • width: number

      The new canvas width in pixels

    • height: number

      The new canvas height in pixels

    Returns void

  • Configures the graphics pipeline with vertex data for rendering. This method sets up the vertex array object (VAO) and binds the necessary buffers.

    Parameters

    • bufferHandles: {
          iboHandle?: number;
          vaoHandle: number;
          vboHandles: number[];
      }

      Object containing buffer handles

      • OptionaliboHandle?: number

        Index Buffer Object handle (optional)

      • vaoHandle: number

        Vertex Array Object handle

      • vboHandles: number[]

        Array of Vertex Buffer Object handles

    • primitive: Primitive

      The primitive geometry defining vertex layout

    • instanceIDBufferUid: number

      Handle to instance ID buffer for instanced rendering

    Returns void

  • Sets the viewport for rendering operations. The viewport defines the area of the framebuffer that will be rendered to.

    Parameters

    • Optionalviewport: Vector4

      Optional viewport rectangle as [x, y, width, height]. If not provided, uses full framebuffer

    Returns void

  • Updates an existing index buffer with new data from an accessor. This allows for dynamic modification of index data without recreating the buffer.

    Parameters

    • accessor: Accessor

      Accessor containing the new index data

    • resourceHandle: number

      Handle to the existing index buffer to update

    Returns void

  • Updates an existing vertex buffer with new data from an accessor. This allows for dynamic modification of vertex data without recreating the buffer.

    Parameters

    • accessor: Accessor

      Accessor containing the new vertex data

    • resourceHandle: number

      Handle to the existing vertex buffer to update

    Returns void

  • Updates both vertex and index buffers for a primitive geometry. This is a convenience method for updating all vertex-related data at once.

    Parameters

    • primitive: Primitive

      The primitive geometry containing updated vertex and index data

    • vertexHandles: VertexHandles

      Object containing handles to the buffers to update

    Returns void