diff --git a/tests/render-utils/src/main.cpp b/tests/render-utils/src/main.cpp index f783efffe3..9c71dd50ea 100644 --- a/tests/render-utils/src/main.cpp +++ b/tests/render-utils/src/main.cpp @@ -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);