/// LSU EE 4702-1 (Fall 2022), GPU Programming
//
 /// CPU-Only Rendering
//
//   Perform all rasterization steps using CPU code.

#include "frame_buffer.h"

void
frame_buffer_1(pFrame_Buffer& demo_frame_buffer)
{
  // Specifications of User's Monitor
  //
  const int win_width = demo_frame_buffer.width_get();
  const int win_height = demo_frame_buffer.height_get();

  //                     RRGGBB
  uint32_t color_red = 0xff00ff;

  // Clear Frame Buffer.
  //
  for ( int y=0; y<win_height; y++ )
    for ( int x=0; x<win_width; x++ )
      demo_frame_buffer[ y * win_width + x ] = 0xffff00;

  // Draw Diagonal Line
  //
  for ( int y=0; y<win_height; y++ )
    demo_frame_buffer[ y * win_width + y ] = color_red;

  // Draw a Square
  for ( int x=100; x<500; x++ )
    {

      // Write frame buffer at location x=x, and y=100 (0 is bottom).
      //
      demo_frame_buffer[ 100 * win_width + x ] = 0xff;
      //
      // win_width is the width (in pixels) of the frame buffer.

      demo_frame_buffer[ 500 * win_width + x ] = 0xff00;
      demo_frame_buffer[ x * win_width + 100 ] = 0x8080ff;
      demo_frame_buffer[ x * win_width + 500 ] = 0xff00;

      demo_frame_buffer[ 99 * win_width + x ] = 0xff;
      demo_frame_buffer[ 501 * win_width + x ] = 0xff00;
      demo_frame_buffer[ x * win_width + 99 ] = 0x8080ff;
      demo_frame_buffer[ x * win_width + 501 ] = 0xff00;
    }

}




int
main(int argc, char **argv)
{
  pFrame_Buffer demo_frame_buffer(argc,argv);
  demo_frame_buffer.show(frame_buffer_1);
  return 0;
}