diff --git a/CMakeLists.txt b/CMakeLists.txt index 432d0b0..f320646 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ set(LIB_SRC_LIST asciientity.cpp asciimodule.cpp framebuffer.cpp - gbuffermodule.cpp + gbuffermodule.cpp lights.cpp meshbuilder.cpp phongentity.cpp @@ -24,8 +24,9 @@ set(LIB_SRC_LIST shader.cpp skyboxmodule.cpp sparrowrenderer.cpp - parametricmesh.cpp + parametricmesh.cpp texture.cpp + entityloader.cpp ) set(LIBRARY_NAME ${PROJECT_NAME}) diff --git a/entityloader.cpp b/entityloader.cpp new file mode 100644 index 0000000..12f79c8 --- /dev/null +++ b/entityloader.cpp @@ -0,0 +1,7 @@ +#include "entityloader.h" + +EntityLoader::EntityLoader() +{ + +} + diff --git a/entityloader.h b/entityloader.h new file mode 100644 index 0000000..ce015fb --- /dev/null +++ b/entityloader.h @@ -0,0 +1,10 @@ +#ifndef ENTITYLOADER_H +#define ENTITYLOADER_H + +class EntityLoader +{ +public: + EntityLoader(); +}; + +#endif // ENTITYLOADER_H diff --git a/glassert.h b/glassert.h index 645ee32..3153cca 100644 --- a/glassert.h +++ b/glassert.h @@ -16,7 +16,7 @@ {\ GLuint err = glGetError(); \ if (err != GL_NO_ERROR) { \ - std::cerr<<"erreur OpenGL ("<<__FILE__<<":"<<__LINE__<<", "<color, 1)))); glAssert(glLightfv(GL_LIGHT0, GL_SPECULAR, glm::value_ptr(glm::vec4(dirLight->color, 1)))); } diff --git a/skyboxmodule.cpp b/skyboxmodule.cpp index 79a3fcc..2671ac4 100644 --- a/skyboxmodule.cpp +++ b/skyboxmodule.cpp @@ -1,17 +1,20 @@ #include #include +#include #include "skyboxmodule.h" #include "phongentity.h" #include "shader.h" #include "texture.h" #include "camera.h" #include "glassert.h" +#include "sparrowrenderer.h" SkyboxModule::SkyboxModule(Texture* myCubeMap) { - if(requiresModernOpenGL()) + if(SparrowRenderer::isModernOpenGLAvailable()) { shader = new Shader(vertSource, fragSource); + mvpLocation = shader->getLocation("MVP"); cubeMap = myCubeMap; // set up vao @@ -23,29 +26,90 @@ SkyboxModule::SkyboxModule(Texture* myCubeMap) glAssert(glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float)*3, NULL)); glAssert(glEnableVertexAttribArray(0)); glAssert(glBindVertexArray(0)); - - mvpLocation = shader->getLocation("MVP"); + } + else + { + displayList = glAssert(glGenLists(1)); + glAssert(glNewList(displayList, GL_COMPILE)); + glAssert(glDisable(GL_LIGHTING)); + glAssert(glEnable(GL_TEXTURE_CUBE_MAP)); + myCubeMap->bind(0); + drawCube(); + glAssert(glDisable(GL_TEXTURE_CUBE_MAP)); + glAssert(glEnable(GL_LIGHTING)); + glAssert(glEndList()); } } SkyboxModule::~SkyboxModule() { - glAssert(glDeleteVertexArrays(1, &vao)); - glAssert(glDeleteBuffers(1, &vbo)); + if(SparrowRenderer::isModernOpenGLAvailable()) + { + glAssert(glDeleteVertexArrays(1, &vao)); + glAssert(glDeleteBuffers(1, &vbo)); + } } void SkyboxModule::renderGL(Camera* myCamera) { - shader->bind(); - glm::mat4 mvp = myCamera->getProjectionMatrix() * glm::mat4(glm::mat3(myCamera->getViewMatrix())); + glm::mat4 viewMatrix = glm::mat4(glm::mat3(myCamera->getViewMatrix())); + glm::mat4 projectionMatrix = myCamera->getProjectionMatrix(); glAssert(glDepthMask(GL_FALSE)); + if(!SparrowRenderer::isModernOpenGLAvailable()) + { + glAssert(glMatrixMode(GL_MODELVIEW)); + glAssert(glLoadMatrixf(glm::value_ptr(viewMatrix))); + glAssert(glMatrixMode(GL_PROJECTION)); + glAssert(glLoadMatrixf(glm::value_ptr(projectionMatrix))); + glAssert(glCallList(displayList)); + } + else + { + shader->bind(); + shader->bindMatrix(mvpLocation, projectionMatrix * viewMatrix); + } cubeMap->bind(0); - shader->bindMatrix(mvpLocation, mvp); glAssert(glBindVertexArray(vao)); glAssert(glDrawArrays(GL_TRIANGLES, 0, 36)); glAssert(glDepthMask(GL_TRUE)); } +void SkyboxModule::drawCube() +{ + const float t = 1; + glAssert(glBegin(GL_QUADS)); + glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); + glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); + glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); + glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); + + glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); + glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); + glTexCoord3f(t,t,t); glVertex3f(t,t,t); + glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); + + glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); + glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); + glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); + glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); + + glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); + glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); + glTexCoord3f(t,t,t); glVertex3f(t,t,t); + glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); + + glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); + glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t); + glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); + glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t); + + glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t); + glTexCoord3f(-t,t,t); glVertex3f(-t,t,t); + glTexCoord3f(t,t,t); glVertex3f(t,t,t); + glTexCoord3f(t,-t,t); glVertex3f(t,-t,t); + glAssert(glEnd()); +} + const GLfloat SkyboxModule::skyboxVertices[] = { -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, diff --git a/skyboxmodule.h b/skyboxmodule.h index 7868434..2a911a9 100644 --- a/skyboxmodule.h +++ b/skyboxmodule.h @@ -14,15 +14,22 @@ class SkyboxModule : public Module static const std::string vertSource; static const std::string fragSource; + // modern opengl variables GLuint vao; GLuint vbo; GLuint mvpLocation; Shader* shader; Texture* cubeMap; + //crappy opengl variables + GLuint displayList; + + void drawCube(); + public: SkyboxModule(Texture* myCubeMap); ~SkyboxModule(); virtual void renderGL(Camera* myCamera); + virtual bool requiresModernOpenGL() {return false;} }; #endif // SKYBOXMODULE_H