Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a39f278 authored by Angel Aguayo's avatar Angel Aguayo
Browse files

Updated Mesh documentation

Updated Mesh and MeshSpecification documentation to better describe parameters/important method features.

Bug: b/253321460
Test: none
Change-Id: I87fb2cdc2ca36f891c339c77b2ed05dee4b84fee
parent 03d61005
Loading
Loading
Loading
Loading
+63 −20
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ import java.nio.ShortBuffer;
 * {@link #makeIndexed(MeshSpecification, Mode, Buffer, int, ShortBuffer, Rect)} methods,
 * where a {@link MeshSpecification} is required along with various attributes for
 * detailing the mesh object, including a mode, vertex buffer, optional index buffer, and bounds
 * for the mesh.
 * for the mesh. Once generated, a mesh object can be drawn through
 * {@link Canvas#drawMesh(Mesh, BlendMode, Paint)}
 *
 * @hide
 */
@@ -53,8 +54,12 @@ public class Mesh {
     *
     * @param meshSpec     {@link MeshSpecification} used when generating the mesh.
     * @param mode         {@link Mode} enum
     * @param vertexBuffer vertex buffer representing through {@link Buffer}.
     * @param vertexCount  the number of vertices represented in the vertexBuffer.
     * @param vertexBuffer vertex buffer representing through {@link Buffer}. This provides the data
     *                     for all attributes provided within the meshSpec for every vertex. That
     *                     is, a vertex buffer should be (attributes size * number of vertices) in
     *                     length to be valid. Note that currently implementation will have a CPU
     *                     backed buffer generated.
     * @param vertexCount  the number of vertices represented in the vertexBuffer and mesh.
     * @param bounds       bounds of the mesh object.
     * @return a new Mesh object.
     */
@@ -70,13 +75,20 @@ public class Mesh {
    }

    /**
     * Generates an indexed {@link Mesh} object.
     * Generates a {@link Mesh} object.
     *
     * @param meshSpec     {@link MeshSpecification} used when generating the mesh.
     * @param mode         {@link Mode} enum
     * @param vertexBuffer vertex buffer representing through {@link Buffer}.
     * @param vertexCount  the number of vertices represented in the vertexBuffer.
     * @param indexBuffer  index buffer representing through {@link ShortBuffer}.
     * @param vertexBuffer vertex buffer representing through {@link Buffer}. This provides the data
     *                     for all attributes provided within the meshSpec for every vertex. That
     *                     is, a vertex buffer should be (attributes size * number of vertices) in
     *                     length to be valid. Note that currently implementation will have a CPU
     *                     backed buffer generated.
     * @param vertexCount  the number of vertices represented in the vertexBuffer and mesh.
     * @param indexBuffer  index buffer representing through {@link ShortBuffer}. Indices are
     *                     required to be 16 bits, so ShortBuffer is necessary. Note that
     *                     currently implementation will have a CPU
     *                     backed buffer generated.
     * @param bounds       bounds of the mesh object.
     * @return a new Mesh object.
     */
@@ -93,7 +105,10 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform color value corresponding to the shader assigned to the mesh. If the shader
     * does not have a uniform with that name or if the uniform is declared with a type other than
     * vec3 or vec4 and corresponding layout(color) annotation then an IllegalArgumentExcepton is
     * thrown.
     *
     * @param uniformName name matching the color uniform declared in the shader program.
     * @param color       the provided sRGB color will be converted into the shader program's output
@@ -104,7 +119,10 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform color value corresponding to the shader assigned to the mesh. If the shader
     * does not have a uniform with that name or if the uniform is declared with a type other than
     * vec3 or vec4 and corresponding layout(color) annotation then an IllegalArgumentExcepton is
     * thrown.
     *
     * @param uniformName name matching the color uniform declared in the shader program.
     * @param color       the provided sRGB color will be converted into the shader program's output
@@ -116,7 +134,10 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform color value corresponding to the shader assigned to the mesh. If the shader
     * does not have a uniform with that name or if the uniform is declared with a type other than
     * vec3 or vec4 and corresponding layout(color) annotation then an IllegalArgumentExcepton is
     * thrown.
     *
     * @param uniformName name matching the color uniform declared in the shader program.
     * @param color       the provided sRGB color will be converted into the shader program's output
@@ -132,7 +153,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than a
     * float or float[1] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the float uniform declared in the shader program.
     * @param value       float value corresponding to the float uniform with the given name.
@@ -142,7 +165,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than a
     * vec2 or float[2] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the float uniform declared in the shader program.
     * @param value1      first float value corresponding to the float uniform with the given name.
@@ -153,7 +178,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than a
     * vec3 or float[3] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the float uniform declared in the shader program.
     * @param value1      first float value corresponding to the float uniform with the given name.
@@ -166,7 +193,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than a
     * vec4 or float[4] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the float uniform declared in the shader program.
     * @param value1      first float value corresponding to the float uniform with the given name.
@@ -180,7 +209,10 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than a
     * float (for N=1), vecN, or float[N], where N is the length of the values param, then an
     * IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the float uniform declared in the shader program.
     * @param values      float value corresponding to the vec4 float uniform with the given name.
@@ -210,7 +242,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than int
     * or int[1] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the int uniform delcared in the shader program.
     * @param value       value corresponding to the int uniform with the given name.
@@ -220,7 +254,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than ivec2
     * or int[2] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the int uniform delcared in the shader program.
     * @param value1      first value corresponding to the int uniform with the given name.
@@ -231,7 +267,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than ivec3
     * or int[3] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the int uniform delcared in the shader program.
     * @param value1      first value corresponding to the int uniform with the given name.
@@ -243,7 +281,9 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than ivec4
     * or int[4] then an IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the int uniform delcared in the shader program.
     * @param value1      first value corresponding to the int uniform with the given name.
@@ -256,7 +296,10 @@ public class Mesh {
    }

    /**
     * Sets the uniform color value corresponding to the shader assigned to the mesh.
     * Sets the uniform value corresponding to the shader assigned to the mesh. If the shader does
     * not have a uniform with that name or if the uniform is declared with a type other than an
     * int (for N=1), ivecN, or int[N], where N is the length of the values param, then an
     * IllegalArgumentException is thrown.
     *
     * @param uniformName name matching the int uniform delcared in the shader program.
     * @param values      int values corresponding to the vec4 int uniform with the given name.
+68 −13
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import libcore.util.NativeAllocationRegistry;
 * generates a {@link MeshSpecification} via the Make method, where multiple parameters to set up
 * the mesh are supplied, including attributes, vertex stride, varyings, and
 * vertex/fragment shaders. There are also additional methods to provide an optional
 * {@link ColorSpace} as well as an alpha type.
 * {@link ColorSpace} as well as an {@link AlphaType}.
 *
 * Note that there are several limitations on various mesh specifications:
 * 1. The max amount of attributes allowed is 8.
@@ -43,15 +43,30 @@ public class MeshSpecification {

    /**
     * Constants for {@link #make(Attribute[], int, Varying[], String, String, ColorSpace, int)}
     * to determine alpha type
     * to determine alpha type. Describes how to interpret the alpha component of a pixel.
     */
    @IntDef({UNKNOWN, OPAQUE, PREMUL, UNPREMULT})
    public @interface AlphaType {
    }

    /**
     * uninitialized.
     */
    public static final int UNKNOWN = 0;

    /**
     * Pixel is opaque.
     */
    public static final int OPAQUE = 1;

    /**
     * Pixel components are premultiplied by alpha.
     */
    public static final int PREMUL = 2;

    /**
     * Pixel components are independent of alpha.
     */
    public static final int UNPREMULT = 3;

    /**
@@ -61,15 +76,41 @@ public class MeshSpecification {
    public @interface Type {
    }

    /**
     * Represents one float. Its equivalent shader type is float.
     */
    public static final int FLOAT = 0;

    /**
     * Represents two floats. Its equivalent shader type is float2.
     */
    public static final int FLOAT2 = 1;

    /**
     * Represents three floats. Its equivalent shader type is float3.
     */
    public static final int FLOAT3 = 2;

    /**
     * Represents four floats. Its equivalent shader type is float4.
     */
    public static final int FLOAT4 = 3;

    /**
     * Represents four bytes. Its equivalent shader type is half4.
     */
    public static final int UBYTE4 = 4;

    /**
     * Data class to represent a single attribute in a shader. Note that type parameter must be
     * one of {@link #FLOAT}, {@link #FLOAT2}, {@link #FLOAT3}, {@link #FLOAT4}, or {@link #UBYTE4}.
     *
     * Note that offset is the offset in number of bytes. For example, if we had two attributes
     *
     * Float3 att1
     * Float att2
     *
     * att1 would have an offset of 0, while att2 would have an offset of 12 bytes.
     */
    public static class Attribute {
        @Type
@@ -106,14 +147,19 @@ public class MeshSpecification {
    }

    /**
     * Creates a {@link MeshSpecification} object.
     * Creates a {@link MeshSpecification} object for use within {@link Mesh}.
     *
     * @param attributes     list of attributes represented by {@link Attribute}. Can hold a max of
     *                       8.
     * @param vertexStride   length of vertex stride. Max of 1024 is accepted.
     * @param vertexStride   length of vertex stride in bytes. This should be the size of a single
     *                       vertex' attributes. Max of 1024 is accepted.
     * @param varyings       List of varyings represented by {@link Varying}. Can hold a max of 6.
     * @param vertexShader   vertex shader to be supplied to the mesh.
     * @param fragmentShader fragment shader to be suppied to the mesh.
     *                       Note that `position` is provided by default, does not need to be
     *                       provided in the list, and does not count towards
     *                       the 6 varyings allowed.
     * @param vertexShader   vertex shader to be supplied to the mesh. Ensure that the position
     *                       varying is set within the shader to get proper results.
     * @param fragmentShader fragment shader to be supplied to the mesh.
     * @return {@link MeshSpecification} object for use when creating {@link Mesh}
     */
    public static MeshSpecification make(Attribute[] attributes, int vertexStride,
@@ -131,10 +177,14 @@ public class MeshSpecification {
     *
     * @param attributes     list of attributes represented by {@link Attribute}. Can hold a max of
     *                       8.
     * @param vertexStride   length of vertex stride. Max of 1024 is accepted.
     * @param varyings       List of varyings represented by {@link Varying}. Can hold a max of
     *                       6.
     * @param vertexShader   vertex shader to be supplied to the mesh.
     * @param vertexStride   length of vertex stride in bytes. This should be the size of a single
     *                       vertex' attributes. Max of 1024 is accepted.
     * @param varyings       List of varyings represented by {@link Varying}. Can hold a max of 6.
     *                       Note that `position` is provided by default, does not need to be
     *                       provided in the list, and does not count towards
     *                       the 6 varyings allowed.
     * @param vertexShader   vertex shader to be supplied to the mesh. Ensure that the position
     *                       varying is set within the shader to get proper results.
     * @param fragmentShader fragment shader to be supplied to the mesh.
     * @param colorSpace     {@link ColorSpace} to tell what color space to work in.
     * @return {@link MeshSpecification} object for use when creating {@link Mesh}
@@ -154,10 +204,15 @@ public class MeshSpecification {
     *
     * @param attributes     list of attributes represented by {@link Attribute}. Can hold a max of
     *                       8.
     * @param vertexStride   length of vertex stride. Max of 1024 is accepted.
     * @param vertexStride   length of vertex stride in bytes. This should be the size of a single
     *                       vertex' attributes. Max of 1024 is accepted.
     * @param varyings       List of varyings represented by {@link Varying}. Can hold a max of 6.
     * @param vertexShader   vertex shader code to be supplied to the mesh.
     * @param fragmentShader fragment shader code to be suppied to the mesh.
     *                       Note that `position` is provided by default, does not need to be
     *                       provided in the list, and does not count towards
     *                       the 6 varyings allowed.
     * @param vertexShader   vertex shader to be supplied to the mesh. Ensure that the position
     *                       varying is set within the shader to get proper results.
     * @param fragmentShader fragment shader to be supplied to the mesh.
     * @param colorSpace     {@link ColorSpace} to tell what color space to work in.
     * @param alphaType      Describes how to interpret the alpha component for a pixel. Must be
     *                       one of {@link AlphaType} values.