1//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7//            Based on Hello_Triangle.c from
8// Book:      OpenGL(R) ES 2.0 Programming Guide
9// Authors:   Aaftab Munshi, Dan Ginsburg, Dave Shreiner
10// ISBN-10:   0321502795
11// ISBN-13:   9780321502797
12// Publisher: Addison-Wesley Professional
13// URLs:      http://safari.informit.com/9780321563835
14//            http://www.opengles-book.com
15
16#include "SampleApplication.h"
17#include "shader_utils.h"
18
19class HelloTriangleSample : public SampleApplication
20{
21  public:
22    HelloTriangleSample::HelloTriangleSample()
23        : SampleApplication("HelloTriangle", 1280, 720)
24    {
25    }
26
27    virtual bool initialize()
28    {
29        const std::string vs = SHADER_SOURCE
30        (
31            attribute vec4 vPosition;
32            void main()
33            {
34                gl_Position = vPosition;
35            }
36        );
37
38        const std::string fs = SHADER_SOURCE
39        (
40            precision mediump float;
41            void main()
42            {
43                gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
44            }
45        );
46
47        mProgram = CompileProgram(vs, fs);
48        if (!mProgram)
49        {
50            return false;
51        }
52
53        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
54
55        return true;
56    }
57
58    virtual void destroy()
59    {
60        glDeleteProgram(mProgram);
61    }
62
63    virtual void draw()
64    {
65        GLfloat vertices[] =
66        {
67             0.0f,  0.5f, 0.0f,
68            -0.5f, -0.5f, 0.0f,
69             0.5f, -0.5f, 0.0f,
70        };
71
72        // Set the viewport
73        glViewport(0, 0, getWindow()->getWidth(), getWindow()->getHeight());
74
75        // Clear the color buffer
76        glClear(GL_COLOR_BUFFER_BIT);
77
78        // Use the program object
79        glUseProgram(mProgram);
80
81        // Load the vertex data
82        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
83        glEnableVertexAttribArray(0);
84
85        glDrawArrays(GL_TRIANGLES, 0, 3);
86    }
87
88  private:
89    GLuint mProgram;
90};
91
92int main(int argc, char **argv)
93{
94    HelloTriangleSample app;
95    return app.run();
96}
97