Class RenderingContext

java.lang.Object
eu.svjatoslav.sixth.e3d.gui.RenderingContext
Direct Known Subclasses:
SegmentRenderingContext

public class RenderingContext extends Object
Contains all state needed to render a single frame: the pixel buffer, graphics context, screen dimensions, and mouse event tracking.

A new RenderingContext is created whenever the view panel is resized. During rendering, shapes use this context to:

The context also manages mouse interaction detection: as shapes are painted back-to-front, each shape can report itself as the object under the mouse cursor. After painting completes, the topmost shape receives the mouse event.

See Also:
  • Field Details

    • bufferedImageType

      public static final int bufferedImageType
      The BufferedImage pixel format used for the rendering buffer. TYPE_INT_RGB provides optimal performance for Java2D blitting.
      See Also:
    • NUM_RENDER_SEGMENTS

      public static final int NUM_RENDER_SEGMENTS
      Number of horizontal segments for parallel rendering. Each segment is rendered by a separate thread.
      See Also:
    • graphics

      public final Graphics2D graphics
      Java2D graphics context for drawing text, anti-aliased shapes, and other high-level graphics operations onto the render buffer.
    • pixels

      public final int[] pixels
      Pixels of the rendering area. Each pixel is a single int in RGB format: (r << 16) | (g << 8) | b.
    • width

      public final int width
      Width of the rendering area in pixels.
    • height

      public final int height
      Height of the rendering area in pixels.
    • centerCoordinate

      public final Point2D centerCoordinate
      Center of the screen in screen space (pixels). This is the point where (0,0) coordinate of the world space is rendered.
    • projectionScale

      public final double projectionScale
      Scale factor for perspective projection, derived from screen width. Used to convert normalized device coordinates to screen pixels.
    • renderMinY

      public final int renderMinY
      Minimum Y coordinate (inclusive) to render. Used for multi-threaded rendering where each thread renders a horizontal segment.
    • renderMaxY

      public final int renderMaxY
      Maximum Y coordinate (exclusive) to render. Used for multi-threaded rendering where each thread renders a horizontal segment.
    • frameNumber

      public int frameNumber
      Number of frame that is currently being rendered. Every frame has its own number.
    • developerTools

      public DeveloperTools developerTools
      Developer tools for this rendering context. Controls diagnostic features like logging and visualization.
    • debugLogBuffer

      public DebugLogBuffer debugLogBuffer
      Debug log buffer for capturing diagnostic output. Shapes can log messages here that appear in the Developer Tools panel.
    • lightingManager

      public LightingManager lightingManager
      Global lighting manager for the scene. All shaded polygons use this to calculate lighting. Contains all light sources and ambient light settings for the world.
  • Constructor Details

    • RenderingContext

      public RenderingContext(int width, int height)
      Creates a new rendering context for full-screen rendering.

      Equivalent to RenderingContext(width, height, 0, height).

      Parameters:
      width - the rendering area width in pixels
      height - the rendering area height in pixels
    • RenderingContext

      public RenderingContext(int width, int height, int renderMinY, int renderMaxY)
      Creates a new rendering context with Y-bounds for segment rendering.

      Initializes the offscreen image buffer, extracts the raw pixel byte array, and configures anti-aliasing on the Graphics2D context.

      Parameters:
      width - the rendering area width in pixels
      height - the rendering area height in pixels
      renderMinY - minimum Y coordinate (inclusive) to render
      renderMaxY - maximum Y coordinate (exclusive) to render
    • RenderingContext

      protected RenderingContext(RenderingContext parent, int renderMinY, int renderMaxY)
      Protected constructor for creating segment views. Shares the pixel buffer and graphics context with the parent.
      Parameters:
      parent - the parent rendering context
      renderMinY - minimum Y coordinate (inclusive) for this segment
      renderMaxY - maximum Y coordinate (exclusive) for this segment
  • Method Details

    • prepareForNewFrameRendering

      public void prepareForNewFrameRendering()
      Resets per-frame state in preparation for rendering a new frame. Increments the frame number and clears the mouse event state.
    • getSegmentGraphics

      public Graphics2D getSegmentGraphics(int segmentIndex)
      Returns the Graphics2D context for a specific render segment. Each segment's Graphics2D is pre-clipped to its Y bounds.
      Parameters:
      segmentIndex - the segment index (0 to NUM_RENDER_SEGMENTS-1)
      Returns:
      the Graphics2D for that segment
      Throws:
      NullPointerException - if called on a segment view (not the main context)
    • dispose

      public void dispose()
      Disposes all Graphics2D resources associated with this context. Should be called when the context is no longer needed (e.g., on resize).
    • executeWithGraphics

      public void executeWithGraphics(Consumer<Graphics2D> operation)
      Executes a graphics operation in a thread-safe manner. This must be used for all Graphics2D operations (text, lines, etc.) during multi-threaded rendering.
      Parameters:
      operation - the graphics operation to execute
    • getMouseEvent

      public MouseEvent getMouseEvent()
      Returns the pending mouse event for this frame, or null if none.
      Returns:
      the mouse event to process, or null
    • setMouseEvent

      public void setMouseEvent(MouseEvent mouseEvent)
      Sets the mouse event to be processed during this frame's rendering.
      Parameters:
      mouseEvent - the mouse event with position and button information
    • setCurrentObjectUnderMouseCursor

      public void setCurrentObjectUnderMouseCursor(MouseInteractionController currentObjectUnderMouseCursor)
      Called when given object was detected under mouse cursor, while processing mouseEvent. Because objects are rendered back to front. The last method caller will set the top-most object, if there are multiple objects under mouse cursor.
      Parameters:
      currentObjectUnderMouseCursor - the object that is currently under the mouse cursor
    • getCurrentObjectUnderMouseCursor

      public MouseInteractionController getCurrentObjectUnderMouseCursor()
      Returns the current object under the mouse cursor. Used by segment rendering to collect mouse results.
      Returns:
      the current object under mouse cursor, or null
    • handlePossibleComponentMouseEvent

      public boolean handlePossibleComponentMouseEvent()
      Handles mouse events for components and returns whether a view repaint is needed.
      Returns:
      true if view update is needed as a consequence of this mouse event