diff --git a/src/apps/qcam/viewfinder_gl.cpp b/src/apps/qcam/viewfinder_gl.cpp
index 9d2a69600db1..5be7bec539bf 100644
--- a/src/apps/qcam/viewfinder_gl.cpp
+++ b/src/apps/qcam/viewfinder_gl.cpp
@@ -443,15 +443,11 @@ bool ViewFinderGL::createFragmentShader()
 		close();
 	}
 
-	/* Bind shader pipeline for use */
-	if (!shaderProgram_.bind()) {
-		qWarning() << "[ViewFinderGL]:" << shaderProgram_.log();
-		close();
-	}
-
 	attributeVertex = shaderProgram_.attributeLocation("vertexIn");
 	attributeTexture = shaderProgram_.attributeLocation("textureIn");
 
+	vertexBuffer_.bind();
+
 	shaderProgram_.enableAttributeArray(attributeVertex);
 	shaderProgram_.setAttributeBuffer(attributeVertex,
 					  GL_FLOAT,
@@ -466,6 +462,8 @@ bool ViewFinderGL::createFragmentShader()
 					  2,
 					  2 * sizeof(GLfloat));
 
+	vertexBuffer_.release();
+
 	textureUniformY_ = shaderProgram_.uniformLocation("tex_y");
 	textureUniformU_ = shaderProgram_.uniformLocation("tex_u");
 	textureUniformV_ = shaderProgram_.uniformLocation("tex_v");
@@ -809,11 +807,18 @@ void ViewFinderGL::doRender()
 
 void ViewFinderGL::paintGL()
 {
-	if (!fragmentShader_)
+	if (!fragmentShader_) {
 		if (!createFragmentShader()) {
 			qWarning() << "[ViewFinderGL]:"
 				   << "create fragment shader failed.";
 		}
+	}
+
+	/* Bind shader pipeline for use. */
+	if (!shaderProgram_.bind()) {
+		qWarning() << "[ViewFinderGL]:" << shaderProgram_.log();
+		close();
+	}
 
 	if (image_) {
 		glClearColor(0.0, 0.0, 0.0, 1.0);
