//
//  Triangle.cpp
//  Triangle
//
//  Created by John Ryland on 2/10/17.
//  Copyright © 2017 John Ryland. All rights reserved.
//

#include <OpenGL/gl.h>
#include "../Framework/Framework.h"


const char* s_fixedFunctionVertexShader =
R"(
  void main()
  {
    gl_FrontColor = gl_Color;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  }
)";


const char* s_fixedFunctionFragmentShader =
R"(
  void main()
  {
    gl_FragColor = gl_Color;
  }
)";


class Triangle : public DemoContext
{
public:
  ~Triangle() override;
  void prepare() override;

  void draw() override;

private:
  GLProgram m_program;
};


Triangle::~Triangle()
{
  m_program.deleteProgram();
}


void Triangle::prepare()
{
  OptionsType options;
  m_program.deleteProgram();
  m_program.loadShaders(s_fixedFunctionVertexShader, s_fixedFunctionFragmentShader, Medium, options, [](unsigned int){}, [](unsigned int){});
}


void Triangle::draw()
{
  m_program.useProgram();
  glDisable(GL_DEPTH_TEST);

  // Fixed function calls
  glColor3f(1.0f, 0.85f, 0.35f);
  glBegin(GL_TRIANGLES);
  {
    glVertex3f(  0.0,  0.6, 0.0);
    glVertex3f( -0.2, -0.3, 0.0);
    glVertex3f(  0.2, -0.3 ,0.0);
  }
  glEnd();
}


REGISTER_DEMO_CONTEXT("Triangle", Triangle)
