Modified CMake to now find and link GLEW
Slight tweaks to how CMake interacts with VS Added small OpenGL testing class which draws over the raycasted image Going to use Gl to start helping with debug / enabling hybrid rendering
This commit is contained in:
118
src/GL_Testing.cpp
Normal file
118
src/GL_Testing.cpp
Normal file
@@ -0,0 +1,118 @@
|
||||
#include "GL_Testing.h"
|
||||
|
||||
GL_Testing::GL_Testing() {
|
||||
|
||||
GLint err = glewInit();
|
||||
|
||||
if (err) {
|
||||
std::cout << "error initializing glew" << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void GL_Testing::compile_shader(std::string file_path, Shader_Type t) {
|
||||
|
||||
|
||||
|
||||
// Load in the source and cstring it
|
||||
const char* source;
|
||||
std::string tmp;
|
||||
|
||||
tmp = read_file(file_path);
|
||||
source = tmp.c_str();
|
||||
|
||||
GLint success;
|
||||
GLchar log[512];
|
||||
|
||||
if (t == Shader_Type::VERTEX) {
|
||||
|
||||
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertex_shader, 1, &source, NULL);
|
||||
glCompileShader(vertex_shader);
|
||||
|
||||
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
||||
|
||||
if (!success) {
|
||||
glGetShaderInfoLog(vertex_shader, 512, NULL, log);
|
||||
std::cout << "Vertex shader failed compilation: " << log << std::endl;
|
||||
}
|
||||
|
||||
} else if (t == Shader_Type::FRAGMENT) {
|
||||
|
||||
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragment_shader, 1, &source, NULL);
|
||||
glCompileShader(fragment_shader);
|
||||
|
||||
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
|
||||
|
||||
if (!success) {
|
||||
glGetShaderInfoLog(fragment_shader, 512, NULL, log);
|
||||
std::cout << "Vertex shader failed compilation: " << log << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GL_Testing::create_program() {
|
||||
|
||||
GLint success;
|
||||
GLchar log[512];
|
||||
|
||||
shader_program = glCreateProgram();
|
||||
glAttachShader(shader_program, vertex_shader);
|
||||
glAttachShader(shader_program, fragment_shader);
|
||||
glLinkProgram(shader_program);
|
||||
|
||||
|
||||
glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
|
||||
|
||||
if (!success) {
|
||||
glGetProgramInfoLog(shader_program, 512, NULL, log);
|
||||
std::cout << "Failed to link shaders into program: " << log << std::endl;
|
||||
}
|
||||
|
||||
glDeleteShader(vertex_shader);
|
||||
glDeleteShader(fragment_shader);
|
||||
}
|
||||
|
||||
void GL_Testing::create_buffers() {
|
||||
|
||||
GLfloat vertices[] = {
|
||||
0.5f, 0.5f, 0.0f, // Top Right
|
||||
0.5f, -0.5f, 0.0f, // Bottom Right
|
||||
-0.5f, -0.5f, 0.0f, // Bottom Left
|
||||
-0.5f, 0.5f, 0.0f // Top Left
|
||||
};
|
||||
GLuint indices[] = { // Note that we start from 0!
|
||||
0, 1, 3 // First Triangle
|
||||
// Second Triangle
|
||||
};
|
||||
|
||||
glGenVertexArrays(1, &VAO);
|
||||
glGenBuffers(1, &VBO);
|
||||
glGenBuffers(1, &EBO);
|
||||
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointer(s).
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0); // Note that this is allowed, the call to glVertexAttribPointer registered VBO as the currently bound vertex buffer object so afterwards we can safely unbind
|
||||
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
void GL_Testing::draw() {
|
||||
|
||||
glUseProgram(shader_program);
|
||||
glBindVertexArray(VAO);
|
||||
//glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
//
|
||||
28
src/main.cpp
28
src/main.cpp
@@ -1,15 +1,14 @@
|
||||
#ifdef linux
|
||||
#include "GL_Testing.h"
|
||||
|
||||
#ifdef linux
|
||||
#include <CL/cl.h>
|
||||
#include <CL/opencl.h>
|
||||
|
||||
#elif defined _WIN32
|
||||
#include <windows.h>
|
||||
#include <CL/cl_gl.h>
|
||||
#include <CL/cl.h>
|
||||
#include <CL/opencl.h>
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#elif defined TARGET_OS_MAC
|
||||
#include <OpenGL/gl.h>
|
||||
# include <OpenGL/OpenGL.h>
|
||||
@@ -24,6 +23,8 @@
|
||||
#include <chrono>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
#include <SFML/Graphics.hpp>
|
||||
#include "Old_Map.h"
|
||||
#include "util.hpp"
|
||||
@@ -33,6 +34,7 @@
|
||||
#include <Camera.h>
|
||||
#include "Software_Caster.h"
|
||||
|
||||
|
||||
const int WINDOW_X = 1920;
|
||||
const int WINDOW_Y = 1080;
|
||||
const int WORK_SIZE = WINDOW_X * WINDOW_Y;
|
||||
@@ -66,6 +68,12 @@ int main() {
|
||||
|
||||
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "SFML");
|
||||
|
||||
GL_Testing t;
|
||||
t.compile_shader("../shaders/passthrough.frag", GL_Testing::Shader_Type::FRAGMENT);
|
||||
t.compile_shader("../shaders/passthrough.vert", GL_Testing::Shader_Type::VERTEX);
|
||||
t.create_program();
|
||||
t.create_buffers();
|
||||
|
||||
// Initialize the raycaster hardware, compat, or software
|
||||
RayCaster *rc = new Hardware_Caster();
|
||||
//RayCaster *rc = new Software_Caster();
|
||||
@@ -190,7 +198,7 @@ int main() {
|
||||
if (deltas != sf::Vector2i(0, 0) && mouse_enabled == true) {
|
||||
|
||||
// Mouse movement
|
||||
//sf::Mouse::setPosition(fixed);
|
||||
sf::Mouse::setPosition(fixed);
|
||||
prev_pos = sf::Mouse::getPosition();
|
||||
camera->slew_camera(sf::Vector2f(
|
||||
deltas.y / 300.0f,
|
||||
@@ -220,6 +228,14 @@ int main() {
|
||||
// Run the raycast
|
||||
rc->compute();
|
||||
rc->draw(&window);
|
||||
|
||||
window.popGLStates();
|
||||
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
t.draw();
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
|
||||
window.pushGLStates();
|
||||
|
||||
// Give the frame counter the frame time and draw the average frame time
|
||||
fps.frame(delta_time);
|
||||
@@ -227,7 +243,7 @@ int main() {
|
||||
|
||||
cam_text_x.draw(&window);
|
||||
cam_text_y.draw(&window);
|
||||
|
||||
|
||||
window.display();
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user