1414#include < memory>
1515#include < stdexcept>
1616
17- void cae::OPGL::initialize (const NativeWindowHandle &nativeWindowHandle)
17+ void cae::OPGL::initialize (const NativeWindowHandle &nativeWindowHandle, const Color &clearColor )
1818{
1919#ifdef __linux__
2020 m_context = std::make_unique<EGLContextLinux>();
@@ -27,18 +27,17 @@ void cae::OPGL::initialize(const NativeWindowHandle &nativeWindowHandle)
2727 m_context->initialize (nativeWindowHandle);
2828
2929 glEnable (GL_DEPTH_TEST);
30- glClearColor (1 .F , 1 .F , 1 .F , 1 .F );
31- createTriangle ();
30+ glClearColor (clearColor.r , clearColor.g , clearColor.b , clearColor.a );
3231}
3332
34- void cae::OPGL::draw (const WindowSize &windowSize)
33+ void cae::OPGL::draw (const WindowSize &windowSize, const ShaderID &shaderId )
3534{
3635 glViewport (0 , 0 , windowSize.width , windowSize.height );
3736 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
3837
39- glUseProgram (m_programs.at (" basic " ));
40- glBindVertexArray (gVAO );
41- glDrawArrays (GL_TRIANGLES, 0 , 3 );
38+ glUseProgram (m_programs.at (shaderId ));
39+ glBindVertexArray (m_mesh. vao );
40+ glDrawArrays (GL_TRIANGLES, 0 , m_mesh. vertexCount );
4241 glBindVertexArray (0 );
4342
4443 m_context->swapBuffers ();
@@ -75,26 +74,6 @@ void cae::OPGL::createPipeline(const ShaderID &id, const ShaderIRModule &vertex,
7574 m_programs[id] = program;
7675}
7776
78- void cae::OPGL::createTriangle ()
79- {
80- constexpr std::array vertices = {-0 .5F , -0 .5F , 1 .F , 0 .F , 0 .F , 0 .5F , -0 .5F , 0 .F ,
81- 1 .F , 0 .F , 0 .0F , 0 .5F , 0 .F , 0 .F , 1 .F };
82-
83- glGenVertexArrays (1 , &gVAO );
84- glGenBuffers (1 , &gVBO );
85-
86- glBindVertexArray (gVAO );
87- glBindBuffer (GL_ARRAY_BUFFER, gVBO );
88- glBufferData (GL_ARRAY_BUFFER, sizeof (vertices), vertices.data (), GL_STATIC_DRAW);
89-
90- glVertexAttribPointer (0 , 2 , GL_FLOAT, GL_FALSE, 5 * sizeof (float ), static_cast <void *>(0 ));
91- glEnableVertexAttribArray (0 );
92- glVertexAttribPointer (1 , 3 , GL_FLOAT, GL_FALSE, 5 * sizeof (float ), (void *)(2 * sizeof (float )));
93- glEnableVertexAttribArray (1 );
94-
95- glBindBuffer (GL_ARRAY_BUFFER, 0 );
96- glBindVertexArray (0 );
97- }
9877
9978GLuint cae::OPGL::createGLShader (const GLenum type, const ShaderIRModule &data)
10079{
@@ -107,3 +86,27 @@ GLuint cae::OPGL::createGLShader(const GLenum type, const ShaderIRModule &data)
10786
10887 return shader;
10988}
89+
90+ void cae::OPGL::createMesh (const std::vector<float >& vertices)
91+ {
92+ Mesh mesh{};
93+ mesh.vertexCount = static_cast <GLsizei>(vertices.size () / 5 );
94+
95+ glGenVertexArrays (1 , &mesh.vao );
96+ glGenBuffers (1 , &mesh.vbo );
97+
98+ glBindVertexArray (mesh.vao );
99+ glBindBuffer (GL_ARRAY_BUFFER, mesh.vbo );
100+ glBufferData (GL_ARRAY_BUFFER, vertices.size () * sizeof (float ), vertices.data (), GL_STATIC_DRAW);
101+
102+ glVertexAttribPointer (0 , 2 , GL_FLOAT, GL_FALSE, 5 * sizeof (float ), (void *)0 );
103+ glEnableVertexAttribArray (0 );
104+
105+ glVertexAttribPointer (1 , 3 , GL_FLOAT, GL_FALSE, 5 * sizeof (float ), (void *)(2 * sizeof (float )));
106+ glEnableVertexAttribArray (1 );
107+
108+ glBindBuffer (GL_ARRAY_BUFFER, 0 );
109+ glBindVertexArray (0 );
110+
111+ m_mesh = mesh;
112+ }
0 commit comments