#include #include #include "sparrowrenderer.h" #include "glassert.h" #include "camera.h" #include "module.h" // main methods bool SparrowRenderer::modernOpenglAvailable = false; void SparrowRenderer::initGL(int width, int height) { glewExperimental = GL_TRUE; GLenum err = glewInit(); if (GLEW_OK != err) fprintf(stderr, "Warning: glewInit failed!\n"); if (!GLEW_ARB_vertex_program || !GLEW_ARB_fragment_program || !GLEW_ARB_texture_float || !GLEW_ARB_draw_buffers || !GLEW_ARB_framebuffer_object || !glewIsSupported("GL_VERSION_3_3")) { modernOpenglAvailable = false; fprintf(stderr, "Warning: modern OpenGL not supported!\nEnabling fallback crappy rendering mode\n"); } else modernOpenglAvailable = true; std::cout << "OpenGL version " << glGetString(GL_VERSION) << std::endl; std::cout << "GLSL version " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl; glAssert(glEnable(GL_DEPTH_TEST)); glAssert(glEnable(GL_CULL_FACE)); glAssert(glEnable(GL_TEXTURE_2D)); resizeGL(width, height); } void SparrowRenderer::destroyGL() { } void SparrowRenderer::resizeGL(int width, int height) { glAssert(glViewport(0, 0, width, height)); camera->resize(width, height); } void SparrowRenderer::renderGL() { glAssert(glClearColor(0, 0, 0, 1.0)); glAssert(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); for(ModuleNode &m : modules) { if(m.isEnabled) m.module->renderGL(getCamera()); } } bool SparrowRenderer::isModernOpenGLAvailable() { return modernOpenglAvailable; } // module methods void SparrowRenderer::addModule(Module* myModule, std::string name) { if(modernOpenglAvailable || !myModule->requiresModernOpenGL()) modules.push_back(ModuleNode(myModule, name)); } int SparrowRenderer::getNbModules() { return modules.size(); } // camera methods void SparrowRenderer::setCamera(Camera* myCamera) { camera = myCamera; } Camera* SparrowRenderer::getCamera() { return camera; }