mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 14:29:13 +02:00
Working on text rendering test
This commit is contained in:
parent
ab1624b0a8
commit
a096c79747
1 changed files with 96 additions and 99 deletions
|
@ -66,11 +66,8 @@ void main() {
|
||||||
//vFragColor = vec4(fract(vTexCoord), log(vTexCoord.x), 1.0);
|
//vFragColor = vec4(fract(vTexCoord), log(vTexCoord.x), 1.0);
|
||||||
})XXXX";
|
})XXXX";
|
||||||
|
|
||||||
|
class QTestWindow : public QWindow {
|
||||||
class QTestWindow : public QWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
bool shuttingDown{ false };
|
|
||||||
QOpenGLContext * m_context;
|
QOpenGLContext * m_context;
|
||||||
ProgramPtr shader;
|
ProgramPtr shader;
|
||||||
VertexArrayPtr vao;
|
VertexArrayPtr vao;
|
||||||
|
@ -79,121 +76,121 @@ class QTestWindow : public QWindow
|
||||||
TextRenderer* _textRenderer[4];
|
TextRenderer* _textRenderer[4];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
QTestWindow();
|
||||||
|
virtual ~QTestWindow();
|
||||||
|
void makeCurrent();
|
||||||
|
void draw();
|
||||||
|
|
||||||
QTestWindow() {
|
protected:
|
||||||
setSurfaceType(QSurface::OpenGLSurface);
|
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;
|
QTestWindow::QTestWindow() {
|
||||||
m_context->setFormat(format);
|
setSurfaceType(QSurface::OpenGLSurface);
|
||||||
m_context->create();
|
|
||||||
|
|
||||||
show();
|
QSurfaceFormat format;
|
||||||
makeCurrent();
|
// 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
|
#ifdef WIN32
|
||||||
glewExperimental = true;
|
glewExperimental = true;
|
||||||
GLenum err = glewInit();
|
GLenum err = glewInit();
|
||||||
if (GLEW_OK != err) {
|
if (GLEW_OK != err) {
|
||||||
/* Problem: glewInit failed, something is seriously wrong. */
|
/* Problem: glewInit failed, something is seriously wrong. */
|
||||||
const GLubyte * errStr = glewGetErrorString(err);
|
const GLubyte * errStr = glewGetErrorString(err);
|
||||||
qDebug("Error: %s\n", errStr);
|
qDebug("Error: %s\n", errStr);
|
||||||
}
|
}
|
||||||
qDebug("Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
|
qDebug("Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
|
||||||
|
|
||||||
if (wglewGetExtension("WGL_EXT_swap_control")) {
|
if (wglewGetExtension("WGL_EXT_swap_control")) {
|
||||||
int swapInterval = wglGetSwapIntervalEXT();
|
int swapInterval = wglGetSwapIntervalEXT();
|
||||||
qDebug("V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF"));
|
qDebug("V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF"));
|
||||||
}
|
}
|
||||||
glGetError();
|
glGetError();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setFramePosition(QPoint(100, -900));
|
setFramePosition(QPoint(100, -900));
|
||||||
resize(QSize(800, 600));
|
resize(QSize(800, 600));
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
_textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12);
|
_textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12, false);
|
||||||
_textRenderer[1] = TextRenderer::getInstance("Something", 12);
|
_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[2] = TextRenderer::getInstance(MONO_FONT_FAMILY, 48, -1, false, TextRenderer::OUTLINE_EFFECT);
|
||||||
_textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24);
|
_textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~QTestWindow() {
|
QTestWindow::~QTestWindow() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void makeCurrent() {
|
void QTestWindow::makeCurrent() {
|
||||||
m_context->makeCurrent(this);
|
m_context->makeCurrent(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw() {
|
static const char * EXAMPLE_TEXT = "Hello 1.0\nline 2";
|
||||||
makeCurrent();
|
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());
|
void QTestWindow::draw() {
|
||||||
glClearColor(0.2f, 0.2f, 0.2f, 1);
|
makeCurrent();
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glViewport(0, 0, _size.width(), _size.height());
|
||||||
glLoadIdentity();
|
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);
|
glColor3f(0.9, 0.9, 0.9);
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
glVertex2f(-1, 0);
|
glVertex2f(0, size.y);
|
||||||
glVertex2f(1, 0);
|
glVertex2f(_size.width(), size.y);
|
||||||
glVertex2f(0, -1);
|
glVertex2f(size.x, 0);
|
||||||
glVertex2f(0, 1);
|
glVertex2f(size.x, _size.height());
|
||||||
glEnd();
|
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:
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
_textRenderer[i]->draw(offsets[i].x, offsets[i].y, EXAMPLE_TEXT, glm::vec4(COLORS[i], 1.0f));
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
};
|
m_context->swapBuffers(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QTestWindow::resizeEvent(QResizeEvent * ev) {
|
||||||
|
QWindow::resizeEvent(ev);
|
||||||
|
_size = ev->size();
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
Loading…
Reference in a new issue