m_backgroundImage = QImage(QLatin1String("background.jpg"));
m_renderer = new SurfaceRenderer(m_window->context(), m_window);
m_backgroundTexture = m_renderer->textureFromImage(m_backgroundImage);
+
render();
}
m_window->makeCurrent();
//Draw the background Image texture
- m_renderer->drawTexture(m_backgroundTexture, m_window->geometry());
+ m_renderer->drawTexture(m_backgroundTexture, m_window->geometry(), 0);
//Iterate all surfaces in m_surfaces
//If type == WaylandSurface::Texture draw textureId at geometry
foreach (WaylandSurface *surface, m_surfaces) {
if (surface->type() == WaylandSurface::Texture)
- m_renderer->drawTexture(surface->texture(), surface->geometry());
+ m_renderer->drawTexture(surface->texture(), surface->geometry(), 1); //depth argument should be dynamic (focused should be top).
else if (surface->type() == WaylandSurface::Shm)
m_renderer->drawImage(surface->image(), surface->geometry());
}
-
frameFinished();
glFinish();
m_window->swapBuffers();
{
const char *textureVertexProgram =
"uniform highp mat4 matrix;\n"
- "attribute highp vec2 vertexCoordEntry;\n"
+ "attribute highp vec3 vertexCoordEntry;\n"
"attribute highp vec2 textureCoordEntry;\n"
"varying highp vec2 textureCoord;\n"
"void main() {\n"
" textureCoord = textureCoordEntry;\n"
- " gl_Position = matrix * vec4(vertexCoordEntry, 0, 1);\n"
+ " gl_Position = matrix * vec4(vertexCoordEntry, 1);\n"
"}\n";
const char *textureFragmentProgram =
m_context->makeCurrent(m_surface);
+ //Enable transparent windows
+ glEnable(GL_BLEND);
+ glBlendFunc (GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
+
//May need to manually set context here
m_shaderProgram = new QGLShaderProgram();
void SurfaceRenderer::drawTexture(int textureId, const QRect &geometry, int depth)
{
+ GLfloat zValue = depth / 1000.0f;
//Set Texture and Vertex coordinates
GLfloat textureCoordinates[] = { 0, 0,
1, 0,
0, 1
};
- GLfloat vertexCoordinates[] = { geometry.left(), geometry.top(),
- geometry.right(), geometry.top(),
- geometry.right(), geometry.bottom(),
- geometry.left(), geometry.bottom()
+ GLfloat vertexCoordinates[] = { geometry.left(), geometry.top(), zValue,
+ geometry.right(), geometry.top(), zValue,
+ geometry.right(), geometry.bottom(), zValue,
+ geometry.left(), geometry.bottom(), zValue
};
//Set matrix to transfrom geometry values into gl coordinate space.
m_context->functions()->glEnableVertexAttribArray(m_vertexCoordEntry);
m_context->functions()->glEnableVertexAttribArray(m_textureCoordEntry);
- m_context->functions()->glVertexAttribPointer(m_vertexCoordEntry, 2, GL_FLOAT, GL_FALSE, 0, vertexCoordinates);
+ m_context->functions()->glVertexAttribPointer(m_vertexCoordEntry, 3, GL_FLOAT, GL_FALSE, 0, vertexCoordinates);
m_context->functions()->glVertexAttribPointer(m_textureCoordEntry, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates);
m_shaderProgram->setUniformValue(m_matrixLocation, m_transformMatrix);