text: // This code is in the public domain -- castanyo@yahoo.es
  
  #pragma once
  #ifndef NV_MESH_RASTER_H
  #define NV_MESH_RASTER_H
  
  /** @file Raster.h
   * @brief Rasterization library.
   *
   * This is just a standard scanline rasterizer that I took from one of my old
   * projects. The perspective correction wasn't necessary so I just removed it.
  **/
  
  #include "nvmath/Vector.h"
  #include "nvmesh/nvmesh.h"
  
  namespace nv
  {
  
      namespace Raster 
      {
          enum Mode {
              Mode_Nearest,
              Mode_Antialiased,
              //Mode_Conservative
          };
  
  
          /// A callback to sample the environment. Return false to terminate rasterization.
          typedef bool (NV_CDECL * SamplingCallback)(void * param, int x, int y, Vector3::Arg bar, Vector3::Arg dx, Vector3::Arg dy, float coverage);
  
          // Process the given triangle. Returns false if rasterization was interrupted by the callback.
          NVMESH_API bool drawTriangle(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[3], SamplingCallback cb, void * param);
  
          // Process the given quad. Returns false if rasterization was interrupted by the callback.
          NVMESH_API bool drawQuad(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[4], SamplingCallback cb, void * param);
  
          typedef bool (NV_CDECL * LineSamplingCallback)(void * param, int x, int y, float t, float d);    // t is the position along the segment, d is the distance to the line.
  
          // Process the given line.
          NVMESH_API void drawLine(bool antialias, Vector2::Arg extents, bool enableScissors, const Vector2 v[2], LineSamplingCallback cb, void * param);
  
          // Draw vertical or horizontal segments. For degenerate triangles.
          //NVMESH_API void drawSegment(Vector2::Arg extents, bool enableScissors, const Vector2 v[2], SamplingCallback cb, void * param);
      }
  }
  
  
  #endif // NV_MESH_RASTER_H
  