Package icyllis.arc3d.granite.geom

# Class AnalyticSimpleBoxStep

java.lang.Object
icyllis.arc3d.granite.GeometryStep
icyllis.arc3d.granite.geom.AnalyticSimpleBoxStep

public class AnalyticSimpleBoxStep extends GeometryStep
This technology draws zero-area lines (round cap, square cap, butt cap), shaped lines (round, square; fill, stroke, stroke and fill), rectangles (fill, stroke, stroke and fill; round join, miter join), round rectangles with circular corners (fill, stroke, stroke and fill; four corners have the same radius), circle (fill, stroke, stroke and fill), supports stroke direction (inside, center, outside) using analytic method.

Always use instanced rendering, without per-vertex data, without index buffer, without uniforms, emits coverage. Supports solid color, supports over-stroking, supports device-independent antialiasing, supports 32 bit-per-channel color input, support lines in local coordinates, supports hard-edge coverage (no AA), supports any local-to-device transforms.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class icyllis.arc3d.granite.GeometryStep

  `GeometryStep.ProgramImpl`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final VertexInputLayout.Attribute`
  `FLAGS_AND_DEPTH`
  Bitfield:
  16-32 bits: painter's depth;
  4-5 bits: join;
  2-4 bits: dir;
  0-2 bits: type;
  join=0: round, join=1: miter;
  dir=0: inside, dir=1: center, dir=2: outside;
  type=0: rect, type=1: round line, type=2 butt line;
  `static final VertexInputLayout.AttributeSet`
  `INSTANCE_ATTRIBS`
  `static final VertexInputLayout.Attribute`
  `LOCAL_RECT`
  (left, top, right, bottom) or ((startX, startY), (stopX, stopY))
  `static final VertexInputLayout.Attribute`
  `RADII`
  X is corner radius for rect or half width for line.
  Y is stroke radius if stroked, or -1.0 if filled.
  Z is local AA radius.

  ### Fields inherited from class icyllis.arc3d.granite.GeometryStep

  `DEPTH, FLAG_EMIT_COVERAGE, FLAG_EMIT_PRIMITIVE_COLOR, FLAG_HANDLE_SOLID_COLOR, FLAG_HAS_TEXTURES, FLAG_OUTSET_BOUNDS_FOR_AA, FLAG_PERFORM_SHADING, MODEL_VIEW, SOLID_COLOR`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AnalyticSimpleBoxStep(boolean aa)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `appendToKey(KeyBuilder b)`
  Appends a key on the KeyBuilder that reflects any variety in the code that the geometry processor subclass can emit.
  `void`
  `emitFragmentColorCode(Formatter fs, String outputColor)`
  Emits the fragment color code into the fragment shader.
  `void`
  `emitFragmentCoverageCode(Formatter fs, String outputCoverage)`
  Emits the fragment coverage code into the fragment shader.
  `void`
  `emitUniforms(UniformHandler uniformHandler, boolean mayRequireLocalCoords)`
  `void`
  `emitVaryings(VaryingHandler varyingHandler, boolean usesFastSolidColor)`
  `void`
  `emitVertexGeomCode(Formatter vs, String worldPosVar, String localPosVar, boolean usesFastSolidColor)`
  Emits the geometry code into the vertex shader.
  `GeometryStep.ProgramImpl`
  `makeProgramImpl(ShaderCaps caps)`
  Returns a new instance of the appropriate implementation class for the given GeometryProcessor.
  `void`
  `writeMesh(MeshDrawWriter writer, Draw draw, float[] solidColor, boolean mayRequireLocalCoords)`

  ### Methods inherited from class icyllis.arc3d.granite.GeometryStep

  `appendAttributesToKey, depthStencilFlags, depthStencilSettings, emitSamplers, emitsCoverage, emitsPrimitiveColor, getInputLayout, handlesSolidColor, hasInstanceAttributes, hasVertexAttributes, instanceAttributes, instanceBinding, instanceStride, makeColorAttribute, name, numInstanceAttributes, numInstanceLocations, numTextureSamplers, numVertexAttributes, numVertexLocations, performsShading, primitiveType, textureSamplerState, textureSamplerSwizzle, uniqueID, vertexAttributes, vertexBinding, vertexStride, writeUniformsAndTextures`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### LOCAL_RECT

    public static final VertexInputLayout.Attribute LOCAL_RECT
    (left, top, right, bottom) or ((startX, startY), (stopX, stopY))

  - ### RADII

    public static final VertexInputLayout.Attribute RADII
    X is corner radius for rect or half width for line.
    Y is stroke radius if stroked, or -1.0 if filled.
    Z is local AA radius.

  - ### FLAGS_AND_DEPTH

    public static final VertexInputLayout.Attribute FLAGS_AND_DEPTH
    Bitfield:
    16-32 bits: painter's depth;
    4-5 bits: join;
    2-4 bits: dir;
    0-2 bits: type;
    join=0: round, join=1: miter;
    dir=0: inside, dir=1: center, dir=2: outside;
    type=0: rect, type=1: round line, type=2 butt line;

  - ### INSTANCE_ATTRIBS

    public static final VertexInputLayout.AttributeSet INSTANCE_ATTRIBS

- ## Constructor Details

  - ### AnalyticSimpleBoxStep

    public AnalyticSimpleBoxStep(boolean aa)

- ## Method Details

  - ### appendToKey

    public void appendToKey(@Nonnull KeyBuilder b)
    Description copied from class: `GeometryStep`
    Appends a key on the KeyBuilder that reflects any variety in the code that the geometry processor subclass can emit.
    Specified by:
      `appendToKey` in class `GeometryStep`
    See Also:
      - `GeometryStep.makeProgramImpl(ShaderCaps)`

  - ### makeProgramImpl

    @Nonnull public GeometryStep.ProgramImpl makeProgramImpl(ShaderCaps caps)
    Description copied from class: `GeometryStep`
    Returns a new instance of the appropriate implementation class for the given GeometryProcessor. This method is called only when the specified key does not exist in the program cache.
    Specified by:
      `makeProgramImpl` in class `GeometryStep`
    See Also:
      - `GeometryStep.appendToKey(KeyBuilder)`

  - ### emitVaryings

    public void emitVaryings(VaryingHandler varyingHandler, boolean usesFastSolidColor)
    Overrides:
      `emitVaryings` in class `GeometryStep`

  - ### emitUniforms

    public void emitUniforms(UniformHandler uniformHandler, boolean mayRequireLocalCoords)
    Overrides:
      `emitUniforms` in class `GeometryStep`

  - ### emitVertexGeomCode

    public void emitVertexGeomCode(Formatter vs, @Nonnull String worldPosVar, @Nullable String localPosVar, boolean usesFastSolidColor)
    Description copied from class: `GeometryStep`
    Emits the geometry code into the vertex shader. Implementation must define "vec4 worldPosVar" with the given name and setup it. If localPosVar is not null, then it must write geometry's local pos to it.
    Overrides:
      `emitVertexGeomCode` in class `GeometryStep`

  - ### emitFragmentColorCode

    public void emitFragmentColorCode(Formatter fs, String outputColor)
    Description copied from class: `GeometryStep`
    Emits the fragment color code into the fragment shader. This is either paint's solid color or per-vertex primitive color. See `GeometryStep.FLAG_HANDLE_SOLID_COLOR` and `GeometryStep.FLAG_EMIT_PRIMITIVE_COLOR`.
    Overrides:
      `emitFragmentColorCode` in class `GeometryStep`

  - ### emitFragmentCoverageCode

    public void emitFragmentCoverageCode(Formatter fs, String outputCoverage)
    Description copied from class: `GeometryStep`
    Emits the fragment coverage code into the fragment shader.

    If `GeometryStep.emitsCoverage()` is false, this method is called for hard-edge coverage, discard the fragment if coverage is 0. Otherwise outputCoverage is non-null, and coverage will involve in blending operations.

    Overrides:
      `emitFragmentCoverageCode` in class `GeometryStep`

  - ### writeMesh

    public void writeMesh(MeshDrawWriter writer, Draw draw, @Nullable float[] solidColor, boolean mayRequireLocalCoords)
    Overrides:
      `writeMesh` in class `GeometryStep`