Added sources.

This commit is contained in:
Nicolás Ortega Froysa 2018-10-25 16:19:07 +02:00
parent f202d0499e
commit 6e80cc759f
No known key found for this signature in database
GPG Key ID: FEC70E3BAE2E69BF
12 changed files with 803 additions and 0 deletions

74
CMakeLists.txt Normal file
View File

@ -0,0 +1,74 @@
# Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
# Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
# arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software. If you use this software
# in a product, an acknowledgment in the product documentation would be
# appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source
# distribution.
cmake_minimum_required(VERSION 2.8)
project(TrippyCube CXX)
# Binary filename
set(TARGET_NAME "trippy-cube")
# Use DEBUG by default
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "release")
endif()
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
# prefer newer versions of OpenGL
set(OpenGL_GL_PREFERENCE "GLVND")
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
find_package(GLEW REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_search_module(SDL2 REQUIRED sdl2)
include_directories(
${SDL2_INCLUDE_DIRS})
set(SRCS
"src/camera.cpp"
"src/input.cpp"
"src/main.cpp"
"src/shaders.cpp")
# Define C++ compiler flags
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -Wpedantic -Wfatal-errors -Werror -pedantic-errors -fno-elide-constructors")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O3")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
if(CMAKE_BUILD_TYPE STREQUAL "debug" OR CMAKE_BUILD_TYPE STREQUAL "relwithdebinfo")
add_definitions(-DDEBUG)
else()
add_definitions(-DNDEBUG)
endif()
add_executable(${TARGET_NAME}
${SRCS})
target_link_libraries(${TARGET_NAME}
OpenGL::OpenGL
OpenGL::GLU
${GLUT_LIBRARIES}
${GLEW_LIBRARIES}
${SDL2_LIBRARIES})

15
LICENSE Normal file
View File

@ -0,0 +1,15 @@
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

7
shaders/frag_shader.glsl Normal file
View File

@ -0,0 +1,7 @@
#version 330 core
in vec3 frag_col;
out vec3 color;
void main() {
color = frag_col;
}

13
shaders/vert_shader.glsl Normal file
View File

@ -0,0 +1,13 @@
#version 330 core
layout(location = 0) in vec3 vert_pos;
layout(location = 1) in vec3 vert_col;
uniform mat4 MVP;
out vec3 frag_col;
void main() {
gl_Position = MVP * vec4(vert_pos, 1);
frag_col = vert_col;
}

44
src/camera.cpp Normal file
View File

@ -0,0 +1,44 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "camera.hpp"
#include <iostream>
#include <cmath>
camera::camera() : pos(0.0f, 0.0f, 0.0f),
yaw(45.0f), angle(45.0f), dist(5.0f) { }
void camera::update(const input *in_sys) {
std::pair<int, int> mm = in_sys->get_mouse_motion();
angle -= glm::radians(static_cast<float>(mm.first));
yaw += glm::radians(static_cast<float>(mm.second));
std::get<0>(pos) = dist * cos(yaw) * sin(angle);
std::get<1>(pos) = dist * sin(yaw);
std::get<2>(pos) = dist * cos(yaw) * cos(angle);
dist -= in_sys->get_scroll();
if(dist < 0)
dist = 0;
}

48
src/camera.hpp Normal file
View File

@ -0,0 +1,48 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#pragma once
#include <GL/gl.h>
#include <tuple>
#include <glm/gtc/matrix_transform.hpp>
#include "input.hpp"
class camera {
public:
camera();
void update(const input *in_sys);
inline glm::vec3 get_pos() {
return glm::vec3(std::get<0>(pos),
std::get<1>(pos),
std::get<2>(pos));
}
private:
std::tuple<GLfloat, GLfloat, GLfloat> pos;
float yaw;
float angle;
float dist; // distance from origin
};

70
src/globals.hpp Normal file
View File

@ -0,0 +1,70 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#pragma once
#include "input.hpp"
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
extern input *in_sys;
static const GLfloat g_vertex_buffer_data[] = {
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};

99
src/input.cpp Normal file
View File

@ -0,0 +1,99 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "input.hpp"
#include <iostream>
#include <stdexcept>
input::input() : scroll(0), mmotion(0,0) {
actions["quit"] = false;
actions["move_left"] = false;
actions["move_right"] = false;
actions["move_foward"] = false;
actions["move_backward"] = false;
int mx, my;
SDL_GetRelativeMouseState(&mx, &my);
old_mpos = std::make_pair(mx, my);
}
void input::sync_events() {
scroll = 0;
SDL_Event e;
while(SDL_PollEvent(&e))
{
switch(e.type)
{
case SDL_QUIT:
actions["quit"] = true;
break;
case SDL_KEYDOWN:
set_key(e.key.keysym, true);
break;
case SDL_KEYUP:
set_key(e.key.keysym, false);
break;
case SDL_MOUSEWHEEL:
if(e.wheel.y not_eq 0)
scroll = e.wheel.y;
}
}
// calculate mouse deltas
int mx, my;
SDL_GetRelativeMouseState(&mx, &my);
mmotion.first = mx - old_mpos.first;
mmotion.second = my - old_mpos.second;
}
bool input::get_action(const std::string &action) const {
try {
return actions.at(action);
} catch(std::exception &e) {
std::cerr << "Failed to access action `" << action <<
"': " << e.what();
return false;
}
}
void input::set_key(SDL_Keysym key, bool value) {
switch(key.sym)
{
case SDLK_w:
actions["move_foward"] = value;
break;
case SDLK_s:
actions["move_backward"] = value;
break;
case SDLK_a:
actions["move_left"] = value;
break;
case SDLK_d:
actions["move_right"] = value;
break;
default:
break;
}
}

49
src/input.hpp Normal file
View File

@ -0,0 +1,49 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#pragma once
#include <SDL2/SDL.h>
#include <map>
#include <utility>
class input {
public:
input();
void sync_events();
bool get_action(const std::string &action) const;
inline std::pair<int, int> get_mouse_motion() const {
return mmotion;
}
inline int get_scroll() const {
return scroll;
}
private:
void set_key(SDL_Keysym key, bool value);
int scroll;
std::map<std::string, bool> actions;
std::pair<int, int> old_mpos; // old mouse position
std::pair<int, int> mmotion; // mouse motion
};

194
src/main.cpp Normal file
View File

@ -0,0 +1,194 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <glm/gtc/matrix_transform.hpp>
#include "input.hpp"
#include "globals.hpp"
#include "shaders.hpp"
#include "camera.hpp"
input *in_sys;
int main() {
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
std::cerr << "ERROR: " << SDL_GetError() << std::endl;
exit(1);
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,
SDL_GL_CONTEXT_PROFILE_CORE);
SDL_Window *window = SDL_CreateWindow("OpenGL Tutorial",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH, SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
if(not window)
{
std::cerr << "ERROR: " << SDL_GetError() << std::endl;
SDL_Quit();
exit(1);
}
//SDL_ShowCursor(SDL_DISABLE);
SDL_SetRelativeMouseMode(SDL_TRUE);
SDL_GLContext glcontext = SDL_GL_CreateContext(window);
SDL_GL_SetSwapInterval(0);
glewExperimental = true;
glewInit();
// create the VAO
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
// vertex buffer
GLuint vbuffer;
glGenBuffers(1, &vbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data),
g_vertex_buffer_data, GL_STATIC_DRAW);
srand(static_cast<unsigned int>(time(0)));
GLfloat color_buffer_data[108];
// generate random colors every time
for(int i = 0; i < 108; ++i)
{
color_buffer_data[i] = static_cast<float>(rand()) /
static_cast<float>(RAND_MAX);
}
bool color_ascend[108];
for(int i = 0; i < 108; ++i)
color_ascend[i] = rand() % 2 ? true : false;
// color buffer
GLuint cbuffer;
glGenBuffers(1, &cbuffer);
glBindBuffer(GL_ARRAY_BUFFER, cbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(color_buffer_data),
color_buffer_data, GL_STATIC_DRAW);
// load the shaders into a GLSL program that can be run
GLuint program_id = load_shaders("../shaders/vert_shader.glsl",
"../shaders/frag_shader.glsl");
GLuint matrix_id = glGetUniformLocation(program_id, "MVP");
// set the clear color to black
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
in_sys = new input();
camera cam;
while(true)
{
cam.update(in_sys);
// clear screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program_id);
glm::mat4 mvp;
{
glm::mat4 proj = glm::perspective(glm::radians(45.0f),
static_cast<float>(SCREEN_WIDTH) / static_cast<float>(SCREEN_HEIGHT),
0.1f, 100.0f);
glm::mat4 view = glm::lookAt(
cam.get_pos(), // camera position
glm::vec3(0,0,0), // where the camera is looking
glm::vec3(0,1,0) // which way is vertically up
);
glm::mat4 mod = glm::mat4(1.0f); // identity matrix, object is at origin
mvp = proj * view * mod;
}
glUniformMatrix4fv(matrix_id, 1, GL_FALSE, &mvp[0][0]);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
// change colors
for(int i = 0; i < 108; ++i)
{
const float color_delta = 0.0001f;
if(color_ascend[i])
color_buffer_data[i] += color_delta;
else
color_buffer_data[i] -= color_delta;
if(color_buffer_data[i] >= 1.0f)
{
color_buffer_data[i] = 1.0f;
color_ascend[i] = false;
}
else if(color_buffer_data[i] <= 0.0f)
{
color_buffer_data[i] = 0.0f;
color_ascend[i] = true;
}
}
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, cbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(color_buffer_data),
color_buffer_data, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
glDrawArrays(GL_TRIANGLES, 0, 12*3);
glDisableVertexAttribArray(0);
SDL_GL_SwapWindow(window);
in_sys->sync_events();
if(in_sys->get_action("quit"))
break;
}
#ifdef DEBUG
std::cout << "Shutting down..." << std::endl;
#endif
glDeleteProgram(program_id);
glDeleteBuffers(1, &cbuffer);
glDeleteBuffers(1, &vbuffer);
SDL_GL_DeleteContext(glcontext);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}

158
src/shaders.cpp Normal file
View File

@ -0,0 +1,158 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "shaders.hpp"
#include <fstream>
#include <stdexcept>
#include <sstream>
#include <vector>
#ifdef DEBUG
# include <iostream>
#endif
GLuint load_shaders(const std::string &vertex_shader_path,
const std::string &fragment_shader_path) {
GLuint vshader_id = glCreateShader(GL_VERTEX_SHADER);
GLuint fshader_id = glCreateShader(GL_FRAGMENT_SHADER);
// load shaders from files
std::string vshader_code;
{
std::ifstream vshader_stream(vertex_shader_path,
std::ios::in);
if(not vshader_stream.is_open())
{
throw std::runtime_error("Failed to open file " +
vertex_shader_path);
}
std::stringstream ss;
ss << vshader_stream.rdbuf();
vshader_code = ss.str();
vshader_stream.close();
}
std::string fshader_code;
{
std::ifstream fshader_stream(fragment_shader_path,
std::ios::in);
if(not fshader_stream.is_open())
{
throw std::runtime_error("Failed to open file " +
fragment_shader_path);
}
std::stringstream ss;
ss << fshader_stream.rdbuf();
fshader_code = ss.str();
fshader_stream.close();
}
GLint res = GL_FALSE;
int info_log_length = 0;
// compile and check shaders
#ifdef DEBUG
std::cout << "Compiling shader: " << vertex_shader_path <<
std::endl;
#endif
{
const char *vsp = vshader_code.c_str();
glShaderSource(vshader_id, 1, &vsp, nullptr);
glCompileShader(vshader_id);
}
glGetShaderiv(vshader_id, GL_COMPILE_STATUS, &res);
glGetShaderiv(vshader_id, GL_INFO_LOG_LENGTH,
&info_log_length);
if(info_log_length > 0)
{
char *vshader_error = new char[info_log_length+1];
glGetShaderInfoLog(vshader_id, info_log_length,
nullptr, vshader_error);
std::string error = "Shader compilation failed: ";
error.append(vshader_error);
delete vshader_error;
throw std::runtime_error(error);
}
#ifdef DEBUG
std::cout << "Compiling shader: " << fragment_shader_path <<
std::endl;
#endif
{
const char *fsp = fshader_code.c_str();
glShaderSource(fshader_id, 1, &fsp, nullptr);
glCompileShader(fshader_id);
}
glGetShaderiv(fshader_id, GL_COMPILE_STATUS, &res);
glGetShaderiv(fshader_id, GL_INFO_LOG_LENGTH,
&info_log_length);
if(info_log_length > 0)
{
char *fshader_error = new char[info_log_length+1];
glGetShaderInfoLog(fshader_id, info_log_length,
nullptr, fshader_error);
std::string error = "Shader compilation failed: ";
error.append(fshader_error);
delete fshader_error;
throw std::runtime_error(error);
}
// link
#ifdef DEBUG
std::cout << "Linking program..." << std::endl;
#endif
GLuint program_id = glCreateProgram();
glAttachShader(program_id, vshader_id);
glAttachShader(program_id, fshader_id);
glLinkProgram(program_id);
// check linkage
glGetProgramiv(program_id, GL_LINK_STATUS, &res);
glGetProgramiv(program_id, GL_INFO_LOG_LENGTH,
&info_log_length);
if(info_log_length > 0)
{
char *link_error = new char[info_log_length+1];
glGetProgramInfoLog(program_id, info_log_length,
nullptr, link_error);
std::string error = "Shader linking failed: ";
error.append(link_error);
delete link_error;
throw std::runtime_error(error);
}
// detach
glDetachShader(program_id, vshader_id);
glDetachShader(program_id, fshader_id);
glDeleteShader(vshader_id);
glDeleteShader(fshader_id);
return program_id;
}

32
src/shaders.hpp Normal file
View File

@ -0,0 +1,32 @@
/*
* Copyright (C) 2018 Ortega Froysa, Nicolás <nortega@themusicinnoise.net> All rights reserved.
* Author: Ortega Froysa, Nicolás <nortega@themusicinnoise.net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#pragma once
#include <string>
#include <GL/glew.h>
#include <GL/gl.h>
GLuint load_shaders(const std::string &vertex_shader_path,
const std::string &fragment_shader_path);