Added indexbuffer and vertex buffer classes
This commit is contained in:
parent
edec347ecc
commit
862aac0454
3 changed files with 52 additions and 42 deletions
|
@ -6,8 +6,15 @@ find_package(glfw3 3.3 REQUIRED)
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
|
|
||||||
|
|
||||||
# Add gl1 executable build from gl1.cpp
|
# Add gl1 executable build from gl1.cpp, glew.c and Renderer.cpp
|
||||||
add_executable(gl1 gl1.cpp)
|
add_executable(
|
||||||
|
gl1
|
||||||
|
gl1.cpp
|
||||||
|
Renderer.cpp
|
||||||
|
VertexBuffer.cpp
|
||||||
|
IndexBuffer.cpp
|
||||||
|
glew.c
|
||||||
|
)
|
||||||
|
|
||||||
# Link gl1 with glew
|
# Link gl1 with glew
|
||||||
#target_link_libraries(gl1 glew)
|
#target_link_libraries(gl1 glew)
|
||||||
|
|
|
@ -1,31 +1,15 @@
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include "Renderer.h"
|
||||||
|
#include "VertexBuffer.h"
|
||||||
|
#include "IndexBuffer.h"
|
||||||
|
|
||||||
typedef unsigned int uint;
|
typedef unsigned int uint;
|
||||||
|
|
||||||
//Only on opengl4
|
|
||||||
static void ErrorGLCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
|
|
||||||
{
|
|
||||||
std::cout << "Source: " << source << "Type: " << type << "Id: " << id << "Severity: " << severity << "Length: " << length << message << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Old way to process openGL errors
|
|
||||||
static void GLClearError()
|
|
||||||
{
|
|
||||||
while (glGetError() != GL_NO_ERROR)
|
|
||||||
; //Clear error flags
|
|
||||||
}
|
|
||||||
|
|
||||||
static void GLCheckError(){
|
|
||||||
while(GLenum error = glGetError()){
|
|
||||||
std::cout << "[OpenGL Error] (" << error << ")" << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ShaderProgramSource
|
struct ShaderProgramSource
|
||||||
{
|
{
|
||||||
std::string VertexSource;
|
std::string VertexSource;
|
||||||
|
@ -140,6 +124,7 @@ int main(void)
|
||||||
|
|
||||||
/* Make the window's context current */
|
/* Make the window's context current */
|
||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
|
glfwSwapInterval(1);
|
||||||
|
|
||||||
//Print opengl version
|
//Print opengl version
|
||||||
std::cout << glGetString(GL_VERSION) << std::endl;
|
std::cout << glGetString(GL_VERSION) << std::endl;
|
||||||
|
@ -151,37 +136,36 @@ int main(void)
|
||||||
0.5f, 0.5f,
|
0.5f, 0.5f,
|
||||||
-0.5f, 0.5f};
|
-0.5f, 0.5f};
|
||||||
|
|
||||||
uint indexes[] = {
|
unsigned int indexes[] = {
|
||||||
0, 1, 2, 2, 3, 0};
|
0, 1, 2, 2, 3, 0};
|
||||||
|
|
||||||
//Create buffer
|
//Create buffer
|
||||||
//Buffer id
|
//Buffer id
|
||||||
unsigned int buffer;
|
VertexBuffer* vb = new VertexBuffer(positions, 4 * 2 * sizeof(float));
|
||||||
glGenBuffers(1, &buffer);
|
GLCall(glEnableVertexAttribArray(0));
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
GLCall(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0));
|
||||||
glBufferData(GL_ARRAY_BUFFER, 10 * sizeof(float), positions, GL_STATIC_DRAW);
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
|
|
||||||
|
|
||||||
unsigned int index_buffer;
|
|
||||||
glGenBuffers(1, &index_buffer);
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer);
|
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(float), indexes, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
|
IndexBuffer* ib = new IndexBuffer(indexes,6);
|
||||||
ShaderProgramSource source = ParseShader(SHADERS_PATH);
|
ShaderProgramSource source = ParseShader(SHADERS_PATH);
|
||||||
|
|
||||||
std::cout << "Shaders: " << source.VertexSource << std::endl;
|
|
||||||
std::cout << std::endl;
|
|
||||||
std::cout << source.FragmentSource << std::endl;
|
|
||||||
|
|
||||||
uint shader = CreateShader(source.VertexSource, source.FragmentSource);
|
uint shader = CreateShader(source.VertexSource, source.FragmentSource);
|
||||||
glUseProgram(shader);
|
GLCall(glUseProgram(shader));
|
||||||
|
|
||||||
|
//Find the shader uniform color
|
||||||
|
int uniform_location = glGetUniformLocation(shader, "u_color");
|
||||||
|
|
||||||
|
if (uniform_location == -1)
|
||||||
|
{
|
||||||
|
std::cout << "Error fetching uniform location" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
float red = 0.0f;
|
||||||
|
float increment = 0.05f;
|
||||||
/* Loop until the user closes the window */
|
/* Loop until the user closes the window */
|
||||||
while (!glfwWindowShouldClose(window))
|
while (!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
/* Render here */
|
/* Render here */
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
GLCall(glClear(GL_COLOR_BUFFER_BIT));
|
||||||
|
|
||||||
// Legacy OpenGL
|
// Legacy OpenGL
|
||||||
//glBegin(GL_TRIANGLES);
|
//glBegin(GL_TRIANGLES);
|
||||||
|
@ -194,7 +178,22 @@ int main(void)
|
||||||
//without index buffer
|
//without index buffer
|
||||||
//glDrawArrays(GL_TRIANGLES, 0, 12);
|
//glDrawArrays(GL_TRIANGLES, 0, 12);
|
||||||
//GLClearError();
|
//GLClearError();
|
||||||
glDrawElements(GL_TRIANGLES, 6 * sizeof(uint), GL_UNSIGNED_INT, nullptr);
|
|
||||||
|
GLCall(glUseProgram(shader));
|
||||||
|
|
||||||
|
GLCall(glUniform4f(uniform_location, 0.2f, 0.3f, 0.8f, 1.0f));
|
||||||
|
|
||||||
|
//GLCall(glBindVertexArray(vb));
|
||||||
|
ib->Bind();
|
||||||
|
|
||||||
|
GLCall(glDrawElements(GL_TRIANGLES, 6 * sizeof(uint), GL_UNSIGNED_INT, nullptr));
|
||||||
|
|
||||||
|
if (red > 1.0f)
|
||||||
|
increment = -0.05f;
|
||||||
|
else if (red < 0.0f)
|
||||||
|
increment = 0.05f;
|
||||||
|
red += increment;
|
||||||
|
|
||||||
//GLCheckError();
|
//GLCheckError();
|
||||||
/* Swap front and back buffers */
|
/* Swap front and back buffers */
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
|
@ -203,6 +202,8 @@ int main(void)
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete ib;
|
||||||
|
delete vb;
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -10,6 +10,8 @@ void main(){
|
||||||
#version 330 core
|
#version 330 core
|
||||||
layout(location = 0) out vec4 color;
|
layout(location = 0) out vec4 color;
|
||||||
|
|
||||||
|
uniform vec4 u_color;
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
color=vec4(1.0,0.0,0.0,1.0);
|
color=u_color;
|
||||||
}
|
}
|
Loading…
Reference in a new issue