Merge branch 'develop' into text-renderer

This commit is contained in:
Brad Davis 2015-02-01 19:47:05 -08:00
commit 8bac67abf9

View file

@ -66,11 +66,8 @@ void main() {
//vFragColor = vec4(fract(vTexCoord), log(vTexCoord.x), 1.0);
})XXXX";
class QTestWindow : public QWindow
{
class QTestWindow : public QWindow {
Q_OBJECT
bool shuttingDown{ false };
QOpenGLContext * m_context;
ProgramPtr shader;
VertexArrayPtr vao;
@ -79,121 +76,121 @@ class QTestWindow : public QWindow
TextRenderer* _textRenderer[4];
public:
QTestWindow();
virtual ~QTestWindow();
void makeCurrent();
void draw();
QTestWindow() {
setSurfaceType(QSurface::OpenGLSurface);
protected:
void resizeEvent(QResizeEvent * ev) override;
};
QSurfaceFormat format;
// Qt Quick may need a depth and stencil buffer. Always make sure these are available.
format.setDepthBufferSize(16);
format.setStencilBufferSize(8);
format.setVersion(4, 3);
format.setProfile(QSurfaceFormat::OpenGLContextProfile::CompatibilityProfile);
setFormat(format);
m_context = new QOpenGLContext;
m_context->setFormat(format);
m_context->create();
QTestWindow::QTestWindow() {
setSurfaceType(QSurface::OpenGLSurface);
show();
makeCurrent();
QSurfaceFormat format;
// Qt Quick may need a depth and stencil buffer. Always make sure these are available.
format.setDepthBufferSize(16);
format.setStencilBufferSize(8);
format.setVersion(4, 3);
format.setProfile(QSurfaceFormat::OpenGLContextProfile::CompatibilityProfile);
setFormat(format);
m_context = new QOpenGLContext;
m_context->setFormat(format);
m_context->create();
show();
makeCurrent();
#ifdef WIN32
glewExperimental = true;
GLenum err = glewInit();
if (GLEW_OK != err) {
/* Problem: glewInit failed, something is seriously wrong. */
const GLubyte * errStr = glewGetErrorString(err);
qDebug("Error: %s\n", errStr);
}
qDebug("Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
glewExperimental = true;
GLenum err = glewInit();
if (GLEW_OK != err) {
/* Problem: glewInit failed, something is seriously wrong. */
const GLubyte * errStr = glewGetErrorString(err);
qDebug("Error: %s\n", errStr);
}
qDebug("Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
if (wglewGetExtension("WGL_EXT_swap_control")) {
int swapInterval = wglGetSwapIntervalEXT();
qDebug("V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF"));
}
glGetError();
if (wglewGetExtension("WGL_EXT_swap_control")) {
int swapInterval = wglGetSwapIntervalEXT();
qDebug("V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF"));
}
glGetError();
#endif
setFramePosition(QPoint(100, -900));
resize(QSize(800, 600));
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
setFramePosition(QPoint(100, -900));
resize(QSize(800, 600));
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
_textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12);
_textRenderer[1] = TextRenderer::getInstance("Something", 12);
_textRenderer[2] = TextRenderer::getInstance(MONO_FONT_FAMILY, 48, -1, false, TextRenderer::OUTLINE_EFFECT);
_textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24);
}
_textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12, false);
_textRenderer[1] = TextRenderer::getInstance("Times New Roman", 12, TextRenderer::SHADOW_EFFECT);
_textRenderer[2] = TextRenderer::getInstance(MONO_FONT_FAMILY, 48, -1, false, TextRenderer::OUTLINE_EFFECT);
_textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24);
}
virtual ~QTestWindow() {
}
QTestWindow::~QTestWindow() {
}
void makeCurrent() {
m_context->makeCurrent(this);
}
void QTestWindow::makeCurrent() {
m_context->makeCurrent(this);
}
void draw() {
makeCurrent();
static const char * EXAMPLE_TEXT = "Hello 1.0\nline 2";
static const glm::uvec2 QUAD_OFFSET(10, 20);
static const glm::vec3 COLORS[4] = {
{ 1, 1, 1 },
{ 0.5, 1.0, 0.5 },
{ 1.0, 0.5, 0.5 },
{ 0.5, 0.5, 1.0 },
};
glViewport(0, 0, _size.width(), _size.height());
glClearColor(0.2f, 0.2f, 0.2f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
void QTestWindow::draw() {
makeCurrent();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, _size.width(), _size.height());
glClearColor(0.2f, 0.2f, 0.2f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, _size.width(), _size.height(), 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
const glm::uvec2 size = glm::uvec2(_size.width() / 2, _size.height() / 2);
const glm::uvec2 offsets[4] = {
{ QUAD_OFFSET.x, QUAD_OFFSET.y },
{ size.x + QUAD_OFFSET.x, QUAD_OFFSET.y },
{ size.x + QUAD_OFFSET.x, size.y + QUAD_OFFSET.y },
{ QUAD_OFFSET.x, size.y + QUAD_OFFSET.y },
};
{
glColor3f(0.9, 0.9, 0.9);
glBegin(GL_LINES);
glVertex2f(-1, 0);
glVertex2f(1, 0);
glVertex2f(0, -1);
glVertex2f(0, 1);
glVertex2f(0, size.y);
glVertex2f(_size.width(), size.y);
glVertex2f(size.x, 0);
glVertex2f(size.x, _size.height());
glEnd();
glOrtho(0, _size.width(), _size.height(), 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
// glLoadIdentity();
static const char * EXAMPLE_TEXT = "Hello 1.0\nline 2";
static const glm::uvec2 offset(10, 20);
const glm::uvec2 offsets[4] = {
{ offset.x, offset.y },
{ _size.width() / 2 + offset.x, offset.y },
{ _size.width() / 2 + offset.x, _size.height() / 2 + offset.y },
{ offset.x, _size.height() / 2 + offset.y },
};
static const glm::vec3 colors[4] = {
{ 1, 1, 1 },
{ 0.5, 1.0, 0.5 },
{ 1.0, 0.5, 0.5 },
{ 0.5, 0.5, 1.0 },
};
for (int i = 0; i < 4; ++i) {
_textRenderer[i]->draw(offsets[i].x, offsets[i].y, EXAMPLE_TEXT, glm::vec4(colors[i], 1.0f));
}
m_context->swapBuffers(this);
}
protected:
void resizeEvent(QResizeEvent * ev) override {
QWindow::resizeEvent(ev);
_size = ev->size();
float aspect = (float)_size.width() / (float)_size.height();
glm::vec2 ortho(1.0);
if (aspect > 1.0) {
ortho.y /= aspect;
} else {
ortho.x *= aspect;
}
float x = _size.width() / 2;
float y = _size.height() / 2;
glMatrixMode(GL_PROJECTION);
glOrtho(-100, 100, -100, 100, 1, -1);
//glOrtho(-_size.width() / 2, _size.width() / 2, -_size.height() / 2, _size.height() / 2, 1, -1);
//MatrixStack::projection().top() = glm::ortho(-ortho.x, ortho.x, -ortho.y, ortho.y);
glMatrixMode(GL_MODELVIEW);
for (int i = 0; i < 4; ++i) {
_textRenderer[i]->draw(offsets[i].x, offsets[i].y, EXAMPLE_TEXT, glm::vec4(COLORS[i], 1.0f));
}
};
m_context->swapBuffers(this);
}
void QTestWindow::resizeEvent(QResizeEvent * ev) {
QWindow::resizeEvent(ev);
_size = ev->size();
}
int main(int argc, char** argv) {
QApplication app(argc, argv);