mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 12:04:18 +02:00
Merge branch 'develop' into text-renderer
This commit is contained in:
commit
8bac67abf9
1 changed files with 96 additions and 99 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue