SparrowRenderer/sparrowrenderer.cpp

93 lines
2.1 KiB
C++

#include <glew/glew.h>
#include <cstdio>
#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;
}