Commit 911b940c authored by Eskil Abrahamsen Blomfeldt's avatar Eskil Abrahamsen Blomfeldt Committed by Eskil Abrahamsen Blomfeldt
Browse files

Debug: Make it possible to save distance field cache on Windows


This makes compilation possible of the saveTexture() function which is
used to store the distance field glyph cache on disk when debugging.
It also changes the warnings output from here to have no prefix, since
this is anyway always available as the context in Qt 5.

Change-Id: If3b64f0921a59c485b5321a5465369708e764afc
Reviewed-by: default avatarYoann Lopes <yoann.lopes@theqtcompany.com>
parent efa81f83
dev 5.10 5.11 5.12 5.12.1 5.12.10 5.12.11 5.12.12 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13 5.13.0 5.13.1 5.13.2 5.14 5.14.0 5.14.1 5.14.2 5.15 5.15.0 5.15.1 5.15.2 5.4 5.5 5.6 5.7 5.8 5.9 5.9.8 6.0 6.0.0 6.1 6.1.0 6.1.1 6.1.2 6.1.3 6.2 6.2.0 6.2.1 6.2.2 wip/cmake wip/dbus wip/itemviews wip/nacl wip/new-backend wip/pointerhandler wip/propertycache-refactor wip/qquickdeliveryagent wip/scenegraphng wip/tizen wip/webassembly v5.15.0-alpha1 v5.14.1 v5.14.0 v5.14.0-rc2 v5.14.0-rc1 v5.14.0-beta3 v5.14.0-beta2 v5.14.0-beta1 v5.14.0-alpha1 v5.13.2 v5.13.1 v5.13.0 v5.13.0-rc3 v5.13.0-rc2 v5.13.0-rc1 v5.13.0-beta4 v5.13.0-beta3 v5.13.0-beta2 v5.13.0-beta1 v5.13.0-alpha1 v5.12.7 v5.12.6 v5.12.5 v5.12.4 v5.12.3 v5.12.2 v5.12.1 v5.12.0 v5.12.0-rc2 v5.12.0-rc1 v5.12.0-beta4 v5.12.0-beta3 v5.12.0-beta2 v5.12.0-beta1 v5.12.0-alpha1 v5.11.3 v5.11.2 v5.11.1 v5.11.0 v5.11.0-rc2 v5.11.0-rc1 v5.11.0-beta4 v5.11.0-beta3 v5.11.0-beta2 v5.11.0-beta1 v5.11.0-alpha1 v5.10.1 v5.10.0 v5.10.0-rc3 v5.10.0-rc2 v5.10.0-rc1 v5.10.0-beta4 v5.10.0-beta3 v5.10.0-beta2 v5.10.0-beta1 v5.10.0-alpha1 v5.9.9 v5.9.8 v5.9.7 v5.9.6 v5.9.5 v5.9.4 v5.9.3 v5.9.2 v5.9.1 v5.9.0 v5.9.0-rc2 v5.9.0-rc1 v5.9.0-beta4 v5.9.0-beta3 v5.9.0-beta2 v5.9.0-beta1 v5.9.0-alpha1 v5.8.0 v5.8.0-rc1 v5.8.0-beta1 v5.8.0-alpha1 v5.7.1 v5.7.0 v5.7.0-rc1 v5.7.0-beta1 v5.7.0-alpha1 v5.6.3 v5.6.2 v5.6.1 v5.6.1-1 v5.6.0 v5.6.0-rc1 v5.6.0-beta1 v5.6.0-alpha1 v5.5.1 v5.5.0 v5.5.0-rc1 v5.5.0-beta1 v5.5.0-alpha1 v5.4.2 v5.4.1 v5.4.0 v5.4.0-rc1
No related merge requests found
Showing with 67 additions and 75 deletions
...@@ -294,30 +294,32 @@ void QSGDistanceFieldGlyphCache::updateTexture(GLuint oldTex, GLuint newTex, con ...@@ -294,30 +294,32 @@ void QSGDistanceFieldGlyphCache::updateTexture(GLuint oldTex, GLuint newTex, con
void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int height) const void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int height) const
{ {
QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions();
GLuint fboId; GLuint fboId;
glGenFramebuffers(1, &fboId); functions->glGenFramebuffers(1, &fboId);
GLuint tmpTexture = 0; GLuint tmpTexture = 0;
glGenTextures(1, &tmpTexture); functions->glGenTextures(1, &tmpTexture);
glBindTexture(GL_TEXTURE_2D, tmpTexture); functions->glBindTexture(GL_TEXTURE_2D, tmpTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); functions->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); functions->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); functions->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); functions->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); functions->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0); functions->glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER_EXT, fboId); functions->glBindFramebuffer(GL_FRAMEBUFFER_EXT, fboId);
glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, functions->glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D,
tmpTexture, 0); tmpTexture, 0);
glActiveTexture(GL_TEXTURE0); functions->glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureId); functions->glBindTexture(GL_TEXTURE_2D, textureId);
glDisable(GL_STENCIL_TEST); functions->glDisable(GL_STENCIL_TEST);
glDisable(GL_DEPTH_TEST); functions->glDisable(GL_DEPTH_TEST);
glDisable(GL_SCISSOR_TEST); functions->glDisable(GL_SCISSOR_TEST);
glDisable(GL_BLEND); functions->glDisable(GL_BLEND);
GLfloat textureCoordinateArray[8]; GLfloat textureCoordinateArray[8];
textureCoordinateArray[0] = 0.0f; textureCoordinateArray[0] = 0.0f;
...@@ -339,9 +341,9 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he ...@@ -339,9 +341,9 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he
vertexCoordinateArray[6] = -1.0f; vertexCoordinateArray[6] = -1.0f;
vertexCoordinateArray[7] = 1.0f; vertexCoordinateArray[7] = 1.0f;
glViewport(0, 0, width, height); functions->glViewport(0, 0, width, height);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertexCoordinateArray); functions->glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertexCoordinateArray);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinateArray); functions->glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinateArray);
{ {
static const char *vertexShaderSource = static const char *vertexShaderSource =
...@@ -362,72 +364,64 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he ...@@ -362,72 +364,64 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he
" gl_FragColor = texture2D(texture, textureCoords); \n" " gl_FragColor = texture2D(texture, textureCoords); \n"
"} \n"; "} \n";
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); GLuint vertexShader = functions->glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); GLuint fragmentShader = functions->glCreateShader(GL_FRAGMENT_SHADER);
if (vertexShader == 0 || fragmentShader == 0) { if (vertexShader == 0 || fragmentShader == 0) {
GLenum error = glGetError(); GLenum error = functions->glGetError();
qWarning("SharedGraphicsCacheServer::setupShaderPrograms: Failed to create shaders. (GL error: %x)", qWarning("QSGDistanceFieldGlyphCache::saveTexture: Failed to create shaders. (GL error: %x)",
error); error);
return; return;
} }
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); functions->glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); functions->glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(vertexShader); functions->glCompileShader(vertexShader);
GLint len = 1; GLint len = 1;
glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &len); functions->glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &len);
char infoLog[2048]; char infoLog[2048];
glGetShaderInfoLog(vertexShader, 2048, NULL, infoLog); functions->glGetShaderInfoLog(vertexShader, 2048, NULL, infoLog);
if (qstrlen(infoLog) > 0) { if (qstrlen(infoLog) > 0)
qWarning("SharedGraphicsCacheServer::setupShaderPrograms, problems compiling vertex shader:\n %s", qWarning("Problems compiling vertex shader:\n %s", infoLog);
infoLog);
}
glCompileShader(fragmentShader); functions->glCompileShader(fragmentShader);
glGetShaderInfoLog(fragmentShader, 2048, NULL, infoLog); functions->glGetShaderInfoLog(fragmentShader, 2048, NULL, infoLog);
if (qstrlen(infoLog) > 0) { if (qstrlen(infoLog) > 0)
qWarning("SharedGraphicsCacheServer::setupShaderPrograms, problems compiling fragent shader:\n %s", qWarning("Problems compiling fragment shader:\n %s", infoLog);
infoLog);
}
GLuint shaderProgram = glCreateProgram(); GLuint shaderProgram = functions->glCreateProgram();
glAttachShader(shaderProgram, vertexShader); functions->glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader); functions->glAttachShader(shaderProgram, fragmentShader);
glBindAttribLocation(shaderProgram, 0, "vertexCoordsArray"); functions->glBindAttribLocation(shaderProgram, 0, "vertexCoordsArray");
glBindAttribLocation(shaderProgram, 1, "textureCoordArray"); functions->glBindAttribLocation(shaderProgram, 1, "textureCoordArray");
glLinkProgram(shaderProgram); functions->glLinkProgram(shaderProgram);
glGetProgramInfoLog(shaderProgram, 2048, NULL, infoLog); functions->glGetProgramInfoLog(shaderProgram, 2048, NULL, infoLog);
if (qstrlen(infoLog) > 0) { if (qstrlen(infoLog) > 0)
qWarning("SharedGraphicsCacheServer::setupShaderPrograms, problems linking shaders:\n %s", qWarning("Problems linking shaders:\n %s", infoLog);
infoLog);
}
glUseProgram(shaderProgram); functions->glUseProgram(shaderProgram);
glEnableVertexAttribArray(0); functions->glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1); functions->glEnableVertexAttribArray(1);
int textureUniformLocation = glGetUniformLocation(shaderProgram, "texture"); int textureUniformLocation = functions->glGetUniformLocation(shaderProgram, "texture");
glUniform1i(textureUniformLocation, 0); functions->glUniform1i(textureUniformLocation, 0);
} }
glDrawArrays(GL_TRIANGLE_FAN, 0, 4); functions->glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
{ {
GLenum error = glGetError(); GLenum error = functions->glGetError();
if (error != GL_NO_ERROR) { if (error != GL_NO_ERROR)
qWarning("SharedGraphicsCacheServer::readBackBuffer: glDrawArrays reported error 0x%x", qWarning("glDrawArrays reported error 0x%x", error);
error);
}
} }
uchar *data = new uchar[width * height * 4]; uchar *data = new uchar[width * height * 4];
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); functions->glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
QImage image(data, width, height, QImage::Format_ARGB32); QImage image(data, width, height, QImage::Format_ARGB32);
...@@ -437,18 +431,16 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he ...@@ -437,18 +431,16 @@ void QSGDistanceFieldGlyphCache::saveTexture(GLuint textureId, int width, int he
image.save(QString::fromLocal8Bit(fileName)); image.save(QString::fromLocal8Bit(fileName));
{ {
GLenum error = glGetError(); GLenum error = functions->glGetError();
if (error != GL_NO_ERROR) { if (error != GL_NO_ERROR)
qWarning("SharedGraphicsCacheServer::readBackBuffer: glReadPixels reported error 0x%x", qWarning("glReadPixels reported error 0x%x", error);
error);
}
} }
glDisableVertexAttribArray(0); functions->glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1); functions->glDisableVertexAttribArray(1);
glDeleteFramebuffers(1, &fboId); functions->glDeleteFramebuffers(1, &fboId);
glDeleteTextures(1, &tmpTexture); functions->glDeleteTextures(1, &tmpTexture);
delete[] data; delete[] data;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment