Commented samples and shuffled bits of the initialisation based on user's feedback.
diff --git a/examples/directx9_example/main.cpp b/examples/directx9_example/main.cpp
index 017a3a9..36be8a6 100644
--- a/examples/directx9_example/main.cpp
+++ b/examples/directx9_example/main.cpp
@@ -203,17 +203,6 @@
     if (g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice) < 0)
         return E_FAIL;
 
-	// Create the vertex buffer.
-	if (g_pd3dDevice->CreateVertexBuffer(10000 * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0)
-        return E_FAIL;
-
-	// Load font texture
-	const void* png_data;
-	unsigned int png_size;
-	ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size);
-	if (D3DXCreateTextureFromFileInMemory(g_pd3dDevice, png_data, png_size, &g_pTexture) < 0)
-		return E_FAIL;
-
     return S_OK;
 }
 
@@ -247,9 +236,11 @@
 		io.MouseDown[1] = false; 
 		return true;
 	case WM_MOUSEWHEEL:
+		// Mouse wheel: -1,0,+1
 		io.MouseWheel = GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1 : -1;
 		return true;
 	case WM_MOUSEMOVE:
+		// Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
 		io.MousePos.x = (signed short)(lParam);
 		io.MousePos.y = (signed short)(lParam >> 16); 
 		return true;
@@ -274,9 +265,10 @@
 	GetClientRect(hWnd, &rect);
 
 	ImGuiIO& io = ImGui::GetIO();
-	io.DisplaySize = ImVec2((float)(rect.right - rect.left), (float)(rect.bottom - rect.top));
-	io.DeltaTime = 1.0f/60.0f;
-	io.KeyMap[ImGuiKey_Tab] = VK_TAB;
+	io.DisplaySize = ImVec2((float)(rect.right - rect.left), (float)(rect.bottom - rect.top));	// Display size, in pixels. For clamping windows positions.
+	io.DeltaTime = 1.0f/60.0f;																	// Time elapsed since last frame, in seconds (in this sample app we'll override this every frame because our timestep is variable)
+	io.PixelCenterOffset = 0.0f;																// Align Direct3D Texels
+	io.KeyMap[ImGuiKey_Tab] = VK_TAB;															// Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime.
 	io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT;
 	io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT;
 	io.KeyMap[ImGuiKey_UpArrow] = VK_UP;
@@ -293,11 +285,28 @@
 	io.KeyMap[ImGuiKey_X] = 'X';
 	io.KeyMap[ImGuiKey_Y] = 'Y';
 	io.KeyMap[ImGuiKey_Z] = 'Z';
-	io.PixelCenterOffset = 0.0f;
 
 	io.RenderDrawListsFn = ImImpl_RenderDrawLists;
 	io.SetClipboardTextFn = ImImpl_SetClipboardTextFn;
 	io.GetClipboardTextFn = ImImpl_GetClipboardTextFn;
+
+	
+	// Create the vertex buffer
+	if (g_pd3dDevice->CreateVertexBuffer(10000 * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0)
+	{
+		IM_ASSERT(0);
+		return;
+	}
+
+	// Load font texture
+	const void* png_data;
+	unsigned int png_size;
+	ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size);
+	if (D3DXCreateTextureFromFileInMemory(g_pd3dDevice, png_data, png_size, &g_pTexture) < 0)
+	{
+		IM_ASSERT(0);
+		return;
+	}
 }
 
 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, int)
diff --git a/examples/opengl_example/main.cpp b/examples/opengl_example/main.cpp
index 2d23a74..f6a026d 100644
--- a/examples/opengl_example/main.cpp
+++ b/examples/opengl_example/main.cpp
@@ -217,58 +217,6 @@
 	glewInit();
 
 	GLenum err = GL_NO_ERROR;
-	GLint status = GL_TRUE;
-	err = glGetError(); IM_ASSERT(err == GL_NO_ERROR);
-
-    // Create and compile the vertex shader
-    vertexShader = glCreateShader(GL_VERTEX_SHADER);
-    glShaderSource(vertexShader, 1, &vertexSource, NULL);
-    glCompileShader(vertexShader);
-	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
-	if (status != GL_TRUE)
-	{
-		char buffer[512];
-		glGetShaderInfoLog(vertexShader, 1024, NULL, buffer);
-		printf("%s", buffer);
-		IM_ASSERT(status == GL_TRUE);
-	}
-
-    // Create and compile the fragment shader
-    fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
-    glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
-    glCompileShader(fragmentShader);
-	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
-	IM_ASSERT(status == GL_TRUE);
-
-    // Link the vertex and fragment shader into a shader program
-    shaderProgram = glCreateProgram();
-    glAttachShader(shaderProgram, vertexShader);
-    glAttachShader(shaderProgram, fragmentShader);
-    glBindFragDataLocation(shaderProgram, 0, "o_col");
-    glLinkProgram(shaderProgram);
-	glGetProgramiv(shaderProgram, GL_LINK_STATUS, &status);
-	IM_ASSERT(status == GL_TRUE);
-
-	uniMVP = glGetUniformLocation(shaderProgram, "MVP");
-	uniClipRect = glGetUniformLocation(shaderProgram, "ClipRect");
-
-	// Create Vertex Buffer Objects & Vertex Array Objects
-	glGenBuffers(1, &vbo);
-	glBindBuffer(GL_ARRAY_BUFFER, vbo);
-	glGenVertexArrays(1, &vao);
-	glBindVertexArray(vao);
-	
-	GLint posAttrib = glGetAttribLocation(shaderProgram, "i_pos");
-	glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), 0);
-	glEnableVertexAttribArray(posAttrib);
-
-	GLint uvAttrib = glGetAttribLocation(shaderProgram, "i_uv");
-	glEnableVertexAttribArray(uvAttrib);
-	glVertexAttribPointer(uvAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (void*)(2*sizeof(float)));
-
-	GLint colAttrib = glGetAttribLocation(shaderProgram, "i_col");
-	glVertexAttribPointer(colAttrib, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (void*)(4*sizeof(float)));
-	glEnableVertexAttribArray(colAttrib);
 	err = glGetError(); IM_ASSERT(err == GL_NO_ERROR);
 }
 
@@ -278,9 +226,10 @@
 	glfwGetWindowSize(window, &w, &h);
 
 	ImGuiIO& io = ImGui::GetIO();
-	io.DisplaySize = ImVec2((float)w, (float)h);
-	io.DeltaTime = 1.0f/60.0f;
-	io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;
+	io.DisplaySize = ImVec2((float)w, (float)h);			// Display size, in pixels. For clamping windows positions.
+	io.DeltaTime = 1.0f/60.0f;								// Time elapsed since last frame, in seconds (in this sample app we'll override this every frame because our timestep is variable)
+	io.PixelCenterOffset = 0.5f;							// Align OpenGL texels
+	io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;					// Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime.
 	io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT;
 	io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT;
 	io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP;
@@ -297,12 +246,68 @@
 	io.KeyMap[ImGuiKey_X] = GLFW_KEY_X;
 	io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
 	io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
-	io.PixelCenterOffset = 0.5f;
 
 	io.RenderDrawListsFn = ImImpl_RenderDrawLists;
 	io.SetClipboardTextFn = ImImpl_SetClipboardTextFn;
 	io.GetClipboardTextFn = ImImpl_GetClipboardTextFn;
 
+
+	// Setup graphics backend
+	GLint status = GL_TRUE;
+	GLenum err = GL_NO_ERROR;
+	err = glGetError(); IM_ASSERT(err == GL_NO_ERROR);
+
+	// Create and compile the vertex shader
+	vertexShader = glCreateShader(GL_VERTEX_SHADER);
+	glShaderSource(vertexShader, 1, &vertexSource, NULL);
+	glCompileShader(vertexShader);
+	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
+	if (status != GL_TRUE)
+	{
+		char buffer[512];
+		glGetShaderInfoLog(vertexShader, 1024, NULL, buffer);
+		printf("%s", buffer);
+		IM_ASSERT(status == GL_TRUE);
+	}
+
+	// Create and compile the fragment shader
+	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
+	glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
+	glCompileShader(fragmentShader);
+	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
+	IM_ASSERT(status == GL_TRUE);
+
+	// Link the vertex and fragment shader into a shader program
+	shaderProgram = glCreateProgram();
+	glAttachShader(shaderProgram, vertexShader);
+	glAttachShader(shaderProgram, fragmentShader);
+	glBindFragDataLocation(shaderProgram, 0, "o_col");
+	glLinkProgram(shaderProgram);
+	glGetProgramiv(shaderProgram, GL_LINK_STATUS, &status);
+	IM_ASSERT(status == GL_TRUE);
+
+	uniMVP = glGetUniformLocation(shaderProgram, "MVP");
+	uniClipRect = glGetUniformLocation(shaderProgram, "ClipRect");
+
+	// Create Vertex Buffer Objects & Vertex Array Objects
+	glGenBuffers(1, &vbo);
+	glBindBuffer(GL_ARRAY_BUFFER, vbo);
+	glGenVertexArrays(1, &vao);
+	glBindVertexArray(vao);
+
+	GLint posAttrib = glGetAttribLocation(shaderProgram, "i_pos");
+	glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), 0);
+	glEnableVertexAttribArray(posAttrib);
+
+	GLint uvAttrib = glGetAttribLocation(shaderProgram, "i_uv");
+	glEnableVertexAttribArray(uvAttrib);
+	glVertexAttribPointer(uvAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (void*)(2*sizeof(float)));
+
+	GLint colAttrib = glGetAttribLocation(shaderProgram, "i_col");
+	glVertexAttribPointer(colAttrib, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (void*)(4*sizeof(float)));
+	glEnableVertexAttribArray(colAttrib);
+	err = glGetError(); IM_ASSERT(err == GL_NO_ERROR);
+
 	// Load font texture
 	glGenTextures(1, &fontTex);
 	glBindTexture(GL_TEXTURE_2D, fontTex);
@@ -348,10 +353,10 @@
 		time = current_time;
 		double mouse_x, mouse_y;
 		glfwGetCursorPos(window, &mouse_x, &mouse_y);
-		io.MousePos = ImVec2((float)mouse_x, (float)mouse_y);
+		io.MousePos = ImVec2((float)mouse_x, (float)mouse_y);							// Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
 		io.MouseDown[0] = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) != 0;
 		io.MouseDown[1] = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) != 0;
-		io.MouseWheel = (mouse_wheel != 0) ? mouse_wheel > 0.0f ? 1 : - 1 : 0;
+		io.MouseWheel = (mouse_wheel != 0) ? mouse_wheel > 0.0f ? 1 : - 1 : 0;			// Mouse wheel: -1,0,+1
 		mouse_wheel = 0.0f;
 		ImGui::NewFrame();
 
diff --git a/imgui.h b/imgui.h
index d2e9041..8f7bf80 100644
--- a/imgui.h
+++ b/imgui.h
@@ -381,7 +381,7 @@
 	void		(*SetClipboardTextFn)(const char* text, const char* text_end);	// Required for clipboard support (nb- the string is *NOT* zero-terminated at 'text_end')
 
 	// Input - Fill before calling NewFrame()
-	ImVec2		MousePos;					// Mouse position (set to -1,-1 if no mouse / on another screen, etc.)
+	ImVec2		MousePos;					// Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
 	bool		MouseDown[2];				// Mouse buttons
 	int			MouseWheel;					// Mouse wheel: -1,0,+1
 	bool		KeyCtrl;					// Keyboard modifier pressed: Control