diff --git a/.gitignore b/.gitignore index 2ce6cc3..8acd9d4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ build* -*.user \ No newline at end of file +*.user +Makefile* +object_script.* +debug +release \ No newline at end of file diff --git a/lights.h b/lights.h index 4c522c5..76e5175 100644 --- a/lights.h +++ b/lights.h @@ -1,8 +1,8 @@ #ifndef LIGHT_H #define LIGHT_H -#include #include +#include #include #define MAX_LIGHTS 4 diff --git a/mesh.h b/mesh.h index dd86097..8da70d3 100644 --- a/mesh.h +++ b/mesh.h @@ -1,9 +1,9 @@ #ifndef MESH_H #define MESH_H +#include #include #include -#include class Mesh { diff --git a/modules.todo b/modules.todo index 0d4c24e..507b391 100644 --- a/modules.todo +++ b/modules.todo @@ -2,6 +2,7 @@ Modules : - bump mapping module +- billboard module - particles module - text/gui module diff --git a/phongmodule.h b/phongmodule.h index 42bb885..eecf6e9 100644 --- a/phongmodule.h +++ b/phongmodule.h @@ -1,10 +1,10 @@ #ifndef PHONGMODULE_H #define PHONGMODULE_H +#include #include "basicmodule.h" #include "phongmaterial.h" #include "mesh.h" -#include class Lights; diff --git a/resourcebase.cpp b/resourcebase.cpp index 6aaaeb6..e409251 100644 --- a/resourcebase.cpp +++ b/resourcebase.cpp @@ -5,6 +5,7 @@ ResourceBase::DataBase ResourceBase::meshes; ResourceBase::DataBase ResourceBase::materials; ResourceBase::DataBase ResourceBase::shaders; ResourceBase::DataBase ResourceBase::entities; +ResourceBase::DataBase ResourceBase::lights; void ResourceBase::setTexture(const std::string &textureName, Texture* myTexture) { @@ -31,6 +32,11 @@ void ResourceBase::setEntity(const std::string &entityName, Entity* myEntity) entities.add(entityName, myEntity); } +void ResourceBase::setLights(const std::string &lightsName, Lights* myLights) +{ + lights.add(lightsName, myLights); +} + Texture* ResourceBase::getTexture(const std::string &textureName) { @@ -57,4 +63,8 @@ Entity* ResourceBase::getEntity(const std::string &entityName) return entities.get(entityName); } +Lights* ResourceBase::getLights(const std::string &lightsName) +{ + return lights.get(lightsName); +} diff --git a/resourcebase.h b/resourcebase.h index 5dd5fb3..c1e2982 100644 --- a/resourcebase.h +++ b/resourcebase.h @@ -6,6 +6,7 @@ class Mesh; class Material; class Shader; class Entity; +class Lights; #include #include @@ -19,12 +20,14 @@ public: static void setMaterial(const std::string &materialName, Material* myMaterial); static void setShader(const std::string &shaderName, Shader* myShader); static void setEntity(const std::string &entityName, Entity* myEntity); + static void setLights(const std::string &lightsName, Lights* myLights); static Texture* getTexture(const std::string &textureName); static Mesh* getMesh(const std::string &meshName); static Material* getMaterial(const std::string &materialName); static Shader* getShader(const std::string &shaderName); static Entity* getEntity(const std::string &entityName); + static Lights* getLights(const std::string &lightsName); protected: template @@ -54,6 +57,7 @@ protected: static DataBase materials; static DataBase shaders; static DataBase entities; + static DataBase lights; }; #endif // RESOURCEBASE_H diff --git a/shader.cpp b/shader.cpp index 7cdee10..57d311a 100644 --- a/shader.cpp +++ b/shader.cpp @@ -1,5 +1,5 @@ -#include "shader.h" #include +#include "shader.h" #include #include "glassert.h" #include @@ -35,6 +35,41 @@ Shader::Shader(const std::string &vertexSource, const std::string &fragmentSourc glAssert(glDeleteShader(fragmentShaderId)); } +Shader::Shader(const std::string &vertexSource, const std::string &geometrySource, const std::string &fragmentSource) +{ + program = glAssert(glCreateProgram()); + + GLuint vertexShaderId = createShader(vertexSource, GL_VERTEX_SHADER); + GLuint geometryShaderId = createShader(geometrySource, GL_GEOMETRY_SHADER); + GLuint fragmentShaderId = createShader(fragmentSource, GL_FRAGMENT_SHADER); + + glAssert(glAttachShader(program, vertexShaderId)); + glAssert(glAttachShader(program, geometryShaderId)); + glAssert(glAttachShader(program, fragmentShaderId)); + + glAssert(glBindAttribLocation(program, 0, "inPosition")); + glAssert(glBindAttribLocation(program, 1, "inNormal")); + glAssert(glBindAttribLocation(program, 2, "inTexCoord")); + + glAssert(glLinkProgram(program)); + + // check errors + GLint linked; + glAssert(glGetProgramiv(program, GL_LINK_STATUS, &linked)); + if (!linked) { + std::cerr << "Program not linked" << std::endl; + printProgramInfoLog(program); + program = 0; + } + + glAssert(glDetachShader(program, vertexShaderId)); + glAssert(glDetachShader(program, geometryShaderId)); + glAssert(glDetachShader(program, fragmentShaderId)); + glAssert(glDeleteShader(vertexShaderId)); + glAssert(glDeleteShader(geometryShaderId)); + glAssert(glDeleteShader(fragmentShaderId)); +} + Shader::~Shader() { bool ok; @@ -55,7 +90,20 @@ GLuint Shader::createShader(const std::string &source, GLenum shaderType) GLint compiled; glAssert(glGetShaderiv(shaderId, GL_COMPILE_STATUS, &compiled)); if (!compiled) { - std::cerr << (shaderType == GL_VERTEX_SHADER ? "Vertex" : "Fragment") << "shader not compiled : " << std::endl; + std::string type_str; + switch(shaderType) + { + case GL_VERTEX_SHADER: + type_str = "Vertex"; + break; + case GL_GEOMETRY_SHADER: + type_str = "Geometry"; + break; + case GL_FRAGMENT_SHADER: + type_str = "Fragment"; + break; + } + std::cerr << type_str << " shader not compiled : " << std::endl; printShaderInfoLog(shaderId); return 0; } diff --git a/shader.h b/shader.h index 09c17ba..1668af6 100644 --- a/shader.h +++ b/shader.h @@ -14,6 +14,7 @@ class Shader public: Shader(const std::string &vertexSource, const std::string &fragmentSource); + Shader(const std::string &vertexSource, const std::string &geometrySource, const std::string &fragmentSource); ~Shader(); GLuint getLocation(std::string attribName); diff --git a/sparrowRenderer.pro b/sparrowRenderer.pro index c38aee8..5fb8828 100644 --- a/sparrowRenderer.pro +++ b/sparrowRenderer.pro @@ -4,20 +4,24 @@ # #------------------------------------------------- -QT += core +QT += core gui opengl widgets -TARGET = sparrowRenderer + +Debug:TARGET = sparrowRendererDebug +Release:TARGET = sparrowRenderer TEMPLATE = lib -CONFIG += c++11 +CONFIG += c++11 staticlib INCLUDEPATH += ../cpp_dependencies/include win32 { - LIBS += -L../../cpp_dependencies/lib/win32 - LIBS += -lopengl32 -lglew32 -lglu32 + DESTDIR = $$PWD/../cpp_dependencies/lib/win32 + LIBS += -L../../cpp_dependencies/lib/win32 + LIBS += -lglew32 -lopengl32 -lglu32 } unix { - LIBS += -L../../cpp_dependencies/lib/linux - LIBS += -lGL -lGLEW -lGLU + DESTDIR = $$PWD/../cpp_dependencies/lib/linux + LIBS += -L../../cpp_dependencies/lib/linux + LIBS += -lGL -lGLEW -lGLU } SOURCES += shader.cpp \ diff --git a/sparrowrenderer.cpp b/sparrowrenderer.cpp index fe513e8..2b141e2 100644 --- a/sparrowrenderer.cpp +++ b/sparrowrenderer.cpp @@ -1,6 +1,6 @@ -#include "sparrowrenderer.h" #include #include +#include "sparrowrenderer.h" #include "glassert.h" #include "camera.h" #include "basicmodule.h"