Index

zydeco / master

Experiment in graphics programming, C++, OpenGL, simulation techniques.

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
916 Nov 2023 11:11a4d3636Fractal ViewerJosh Stockin133G

Blob @ zydeco / src / render / objects / GLRenderObjectRainbowTriangle.cpp

text/plain1570 bytesdownload raw
1#include <GL/gl3w.h>
2
3#include "GLRenderObject.hpp"
4#include "GLRenderObjectRainbowTriangle.hpp"
5#include "GLProgram.hpp"
6
7
8GLRenderObjectRainbowTriangle::GLRenderObjectRainbowTriangle():
9 GLRenderObject::GLRenderObject("RainbowTriangle", 1) // use GLProgram "RainbowTriangle", render w/ priority 1
10{
11
12}
13
14void GLRenderObjectRainbowTriangle::Generate()
15{
16 float vertices[] = {
17 // For visualization: each row is a vertex.
18 // Each vertex has position [x, y, z] and color [r, g, b]
19 -0.5f, -0.5f, 1.0f, 1.0, 0.0, 0.0, // red color for this vertex
20 0.5f, -0.5f, 1.0f, 0.0, 1.0, 0.0, // green color
21 0.0f, 0.5f, 1.0f, 0.0, 0.0, 1.0, // blue color for our top vertex
22 };
23
24 glGenVertexArrays(1, &m_VAO);
25 glBindVertexArray(m_VAO);
26
27 unsigned int VBO;
28 glGenBuffers(1, &VBO);
29
30 glBindBuffer(GL_ARRAY_BUFFER, VBO);
31
32 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
33
34 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*) 0);
35 glEnableVertexAttribArray(0);
36 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
37 glEnableVertexAttribArray(1);
38}
39
40void GLRenderObjectRainbowTriangle::Render()
41{
42 if (!m_renderEnabled) { return; }
43
44 if (!m_geometryGenerated)
45 {
46 Generate();
47 m_geometryGenerated = true;
48 }
49 GLTargetSetup(); // generic GLRenderObject.GLTargetSetup(), calls glUseProgram() and glUniformX()
50
51 glBindVertexArray(m_VAO);
52 glDrawArrays(GL_TRIANGLES, 0, 3);
53}
54