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