#include "glew.h" #include #include #include #include "sparrowrenderer.h" #include "camera.h" #include "framebuffer.h" #include "module.h" #include #include #include #include "pipeline.h" #include "scene.h" // main methods bool SparrowRenderer::modernOpenglAvailable = false; void SparrowRenderer::initGL(int w, int h, bool forceCrappy) { glewExperimental = GL_TRUE; GLenum err = glewInit(); if (GLEW_OK != err) fprintf(stderr, "Warning: glewInit failed!\n"); if (!forceCrappy && GLEW_ARB_vertex_program && GLEW_ARB_draw_buffers && GLEW_ARB_framebuffer_object && glewIsSupported("GL_VERSION_3_3") && GLEW_VERSION_3_3 && strcmp("3.30",(const char *)glGetString(GL_SHADING_LANGUAGE_VERSION)) <= 0) { modernOpenglAvailable = true; printf("Modern OpenGL available.\n"); } else { modernOpenglAvailable = false; fprintf(stderr, "Warning: modern OpenGL not supported!\nEnabling fallback crappy rendering mode\n"); } std::cout << "OpenGL " << glGetString(GL_VERSION) << std::endl; std::cout << "GLSL " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl; std::cout << "Renderer " << glGetString(GL_RENDERER) << std::endl; std::cout << "Vendor " << glGetString(GL_VENDOR) << std::endl; resizeGL(w, h); } void SparrowRenderer::resizeGL(int w, int h) { width = w; height = h; if(m_scene != NULL) { if(m_scene->getPipeline() != NULL) m_scene->getPipeline()->resizeGL(w, h); } } void SparrowRenderer::renderGL() { if(m_scene != NULL && m_scene->getPipeline() != NULL) { m_scene->getPipeline()->renderGL(m_scene); } glFinish(); } bool SparrowRenderer::isModernOpenGLAvailable() { return modernOpenglAvailable; } // scene methods void SparrowRenderer::setScene(Scene* myScene) { m_scene = myScene; if(m_scene == NULL || m_scene->getPipeline() == NULL) fprintf(stderr, "WARNING : incomplete scene class, rendering may not work properly.\n"); }