86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
#include "glew.h"
|
|
#include <GL/gl.h>
|
|
#include <GL/glext.h>
|
|
#include <cstdio>
|
|
#include "sparrowrenderer.h"
|
|
|
|
#include "camera.h"
|
|
#include "framebuffer.h"
|
|
#include "module.h"
|
|
#include <chrono>
|
|
#include <string.h>
|
|
#include <iostream>
|
|
#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");
|
|
}
|
|
|
|
|
|
|