1#include "triangle.h"
2#include "shaders.h"
3
4#include "../util/shader.h"
5
6#include "config.h"
7
8#ifdef USE_GLES
9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h>
11#else
12 #include <GL/glew.h>
13#endif
14
15#include <stddef.h>
16
17#ifndef USE_GLES
18 static GLuint sliTriangleVAO = 0;
19#endif
20static GLuint sliTriangleVBOs[1] = {0};
21
22void sliTriangleInit()
23{
24 GLfloat vertices[] = {0.0f, 0.5f,
25 -0.5f, -0.5f,
26 0.5f, -0.5f};
27
28 // initialize our state object
29 #ifndef USE_GLES
30 glGenVertexArrays(1, &sliTriangleVAO);
31 glBindVertexArray(sliTriangleVAO);
32 #endif
33 glGenBuffers(1, sliTriangleVBOs);
34
35 // configure vertex data
36 glBindBuffer(GL_ARRAY_BUFFER, sliTriangleVBOs[0]);
37 glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 6, vertices, GL_STATIC_DRAW);
38 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
39 glEnableVertexAttribArray(0);
40}
41
42void sliTriangleDestroy()
43{
44 glDeleteBuffers(1, sliTriangleVBOs);
45 #ifndef USE_GLES
46 glDeleteVertexArrays(1, &sliTriangleVAO);
47 #endif
48}
49
50void sliTriangleOutline(Mat4 *modelview, Vec4 *color)
51{
52 // prepare our shader object
53 shaderBind(sliBasicShader);
54 shaderUniformMatrix4fv(sliBasicShader, "u_Modelview", 1, (float*)modelview);
55 shaderUniform4f(sliBasicShader, "u_Color", (float)color -> x, (float)color -> y, (float)color -> z, (float)color -> w);
56
57 // bind appropriate object state and render the object
58 #ifndef USE_GLES
59 glBindVertexArray(sliTriangleVAO);
60 #endif
61 glBindBuffer(GL_ARRAY_BUFFER, sliTriangleVBOs[0]);
62 #ifdef USE_GLES
63 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
64 #endif
65 glDrawArrays(GL_LINE_LOOP, 0, 3);
66}
67
68void sliTriangleFill(Mat4 *modelview, Vec4 *color)
69{
70 // prepare our shader object
71 shaderBind(sliBasicShader);
72 shaderUniformMatrix4fv(sliBasicShader, "u_Modelview", 1, (float*)modelview);
73 shaderUniform4f(sliBasicShader, "u_Color", (float)color -> x, (float)color -> y, (float)color -> z, (float)color -> w);
74
75 // bind appropriate object state and render the object
76 #ifndef USE_GLES
77 glBindVertexArray(sliTriangleVAO);
78 #endif
79 glBindBuffer(GL_ARRAY_BUFFER, sliTriangleVBOs[0]);
80 #ifdef USE_GLES
81 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, (GLsizei)0, (char*)0);
82 #endif
83 glDrawArrays(GL_TRIANGLES, 0, 3);
84}
85