Tidying up example applications
diff --git a/examples/directx9_example/main.cpp b/examples/directx9_example/main.cpp
index 36be8a6..01cb3c6 100644
--- a/examples/directx9_example/main.cpp
+++ b/examples/directx9_example/main.cpp
@@ -12,16 +12,15 @@
 static LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device
 static LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;		// Buffer to hold vertices
 static LPDIRECT3DTEXTURE9      g_pTexture = NULL;	// Our texture
-
 struct CUSTOMVERTEX
 {
     D3DXVECTOR3	position;
     D3DCOLOR	color;
     float		tu, tv;
 };
-
 #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
 
+// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structuer)
 static void ImImpl_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
 {
 	size_t total_vtx_count = 0;
@@ -30,31 +29,13 @@
 	if (total_vtx_count == 0)
 		return;
 
-	ImVector<ImVec4> clip_rect_stack;
-	clip_rect_stack.push_back(ImVec4(-9999,-9999,+9999,+9999));
-
-	// Setup orthographic projection
-	// Set up world matrix
-	D3DXMATRIXA16 mat;
-	D3DXMatrixIdentity(&mat);
-	g_pd3dDevice->SetTransform(D3DTS_WORLD, &mat);
-	g_pd3dDevice->SetTransform(D3DTS_VIEW, &mat);
-	D3DXMatrixOrthoOffCenterLH(&mat, 0.0f, ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y, 0.0f, -1.0f, +1.0f);
-	g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &mat);
-    
-	D3DSURFACE_DESC texture_desc;
-	g_pTexture->GetLevelDesc(0, &texture_desc);
-
-    // Fill the vertex buffer
+	// Copy and convert all vertices into a single contiguous buffer
     CUSTOMVERTEX* vtx_dst;
     if (g_pVB->Lock(0, total_vtx_count, (void**)&vtx_dst, D3DLOCK_DISCARD) < 0)
         return;
-
 	for (int n = 0; n < cmd_lists_count; n++)
 	{
 		const ImDrawList* cmd_list = cmd_lists[n];
-		if (cmd_list->commands.empty() || cmd_list->vtx_buffer.empty())
-			continue;
 		const ImDrawVert* vtx_src = &cmd_list->vtx_buffer[0];
 		for (size_t i = 0; i < cmd_list->vtx_buffer.size(); i++)
 		{
@@ -73,11 +54,10 @@
 	g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
 	g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
 
-	// Setup render state: alpha-blending enabled, no face culling, no depth testing
+	// Setup render state: alpha-blending, no face culling, no depth testing
     g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
     g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
     g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, false );
-
 	g_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
 	g_pd3dDevice->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
 	g_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, false );
@@ -94,17 +74,29 @@
 	g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
 	g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
 
-	int vtx_consumed = 0;					// offset in vertex buffer. each command consume ImDrawCmd::vtx_count of those
-	bool clip_rect_dirty = true;
+	// Setup orthographic projection matrix
+	D3DXMATRIXA16 mat;
+	D3DXMatrixIdentity(&mat);
+	g_pd3dDevice->SetTransform(D3DTS_WORLD, &mat);
+	g_pd3dDevice->SetTransform(D3DTS_VIEW, &mat);
+	D3DXMatrixOrthoOffCenterLH(&mat, 0.0f, ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y, 0.0f, -1.0f, +1.0f);
+	g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &mat);
 
+	// Render command lists
+	int vtx_consumed = 0;					// offset in vertex buffer. each command consume ImDrawCmd::vtx_count of those
 	for (int n = 0; n < cmd_lists_count; n++)
 	{
 		const ImDrawList* cmd_list = cmd_lists[n];
-		if (cmd_list->commands.empty() || cmd_list->vtx_buffer.empty())
-			continue;
+
+		// Setup stack of clipping rectangles
+		bool clip_rect_dirty = true;
+		int clip_rect_buf_consumed = 0;
+		ImVector<ImVec4> clip_rect_stack; 
+		clip_rect_stack.push_back(ImVec4(-9999,-9999,+9999,+9999));
+
+		// Render command list
 		const ImDrawCmd* pcmd = &cmd_list->commands.front();
 		const ImDrawCmd* pcmd_end = &cmd_list->commands.back();
-		int clip_rect_buf_consumed = 0;		// offset in cmd_list->clip_rect_buffer. each PushClipRect command consume 1 of those.
 		while (pcmd <= pcmd_end)
 		{
 			const ImDrawCmd& cmd = *pcmd++;
@@ -289,7 +281,6 @@
 	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)
@@ -396,13 +387,15 @@
 				ImGui::End();
 			}
 
-			// 3) Render
+			// 3) Rendering
+			// Clear frame buffer
 		    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
 			g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
 			g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, false);
-			g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(204, 153, 153), 1.0f, 0);	// Clear the backbuffer and the zbuffer
+			g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(204, 153, 153), 1.0f, 0);
 			if (g_pd3dDevice->BeginScene() >= 0)
 			{
+				// Render ImGui
 				ImGui::Render();
 				g_pd3dDevice->EndScene();
 			}
diff --git a/examples/opengl_example/main.cpp b/examples/opengl_example/main.cpp
index f6a026d..7698932 100644
--- a/examples/opengl_example/main.cpp
+++ b/examples/opengl_example/main.cpp
@@ -18,6 +18,7 @@
 static GLint uniMVP;
 static GLint uniClipRect;
 
+// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structuer)
 static void ImImpl_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
 {
 	size_t total_vtx_count = 0;
@@ -26,12 +27,34 @@
 	if (total_vtx_count == 0)
 		return;
 
-	int read_pos_clip_rect_buf = 0;		// offset in 'clip_rect_buffer'. each PushClipRect command consume 1 of those.
+	// Copy all vertices into a single contiguous GL buffer
+	glBindBuffer(GL_ARRAY_BUFFER, vbo);
+	glBindVertexArray(vao);
+	glBufferData(GL_ARRAY_BUFFER, total_vtx_count * sizeof(ImDrawVert), NULL, GL_STREAM_DRAW);
+	unsigned char* buffer_data = (unsigned char*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
+	if (!buffer_data)
+		return;
+	int vtx_consumed = 0;
+	for (int n = 0; n < cmd_lists_count; n++)
+	{
+		const ImDrawList* cmd_list = cmd_lists[n];
+		memcpy(buffer_data, &cmd_list->vtx_buffer[0], cmd_list->vtx_buffer.size() * sizeof(ImDrawVert));
+		buffer_data += cmd_list->vtx_buffer.size() * sizeof(ImDrawVert);
+		vtx_consumed += cmd_list->vtx_buffer.size();
+	}
+	glUnmapBuffer(GL_ARRAY_BUFFER);
+	
+	// Setup render state: alpha-blending enabled, no face culling, no depth testing
+	glEnable(GL_BLEND);
+	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	glDisable(GL_CULL_FACE);
+	glDisable(GL_DEPTH_TEST);
 
-	ImVector<ImVec4> clip_rect_stack;
-	clip_rect_stack.push_back(ImVec4(-9999,-9999,+9999,+9999));
+	// Bind texture and enable our shader
+	glBindTexture(GL_TEXTURE_2D, fontTex);
+	glUseProgram(shaderProgram);
 
-	// Setup orthographic projection
+	// Setup orthographic projection matrix
 	const float L = 0.0f;
 	const float R = ImGui::GetIO().DisplaySize.x;
 	const float B = ImGui::GetIO().DisplaySize.y;
@@ -43,48 +66,23 @@
 		{ 0.0f,			0.0f,			-1.0f,		0.0f },
 		{ -(R+L)/(R-L),	-(T+B)/(T-B),	0.0f,		1.0f },
 	};
-
-	glBindBuffer(GL_ARRAY_BUFFER, vbo);
-	glBindVertexArray(vao);
-	glBufferData(GL_ARRAY_BUFFER, total_vtx_count * sizeof(ImDrawVert), NULL, GL_STREAM_DRAW);
-	unsigned char* buffer_data = (unsigned char*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
-	if (!buffer_data)
-		return;
-	int vtx_consumed = 0;
-	for (int n = 0; n < cmd_lists_count; n++)
-	{
-		const ImDrawList* cmd_list = cmd_lists[n];
-		if (!cmd_list->vtx_buffer.empty())
-		{
-			memcpy(buffer_data, &cmd_list->vtx_buffer[0], cmd_list->vtx_buffer.size() * sizeof(ImDrawVert));
-			buffer_data += cmd_list->vtx_buffer.size() * sizeof(ImDrawVert);
-			vtx_consumed += cmd_list->vtx_buffer.size();
-		}
-	}
-	glUnmapBuffer(GL_ARRAY_BUFFER);
-	
-	glUseProgram(shaderProgram);
 	glUniformMatrix4fv(uniMVP, 1, GL_FALSE, &mvp[0][0]);
 
-	// Setup render state: alpha-blending enabled, no face culling, no depth testing
-	glEnable(GL_BLEND);
-	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-	glDisable(GL_CULL_FACE);
-	glDisable(GL_DEPTH_TEST);
-
-	glBindTexture(GL_TEXTURE_2D, fontTex);
-
+	// Render command lists
 	vtx_consumed = 0;						// offset in vertex buffer. each command consume ImDrawCmd::vtx_count of those
-	bool clip_rect_dirty = true;
-
 	for (int n = 0; n < cmd_lists_count; n++)
 	{
 		const ImDrawList* cmd_list = cmd_lists[n];
-		if (cmd_list->commands.empty() || cmd_list->vtx_buffer.empty())
-			continue;
+
+		// Setup stack of clipping rectangles
+		bool clip_rect_dirty = true;
+		int clip_rect_buf_consumed = 0;
+		ImVector<ImVec4> clip_rect_stack;
+		clip_rect_stack.push_back(ImVec4(-9999,-9999,+9999,+9999));
+
+		// Render command list
 		const ImDrawCmd* pcmd = &cmd_list->commands.front();
 		const ImDrawCmd* pcmd_end = &cmd_list->commands.back();
-		int clip_rect_buf_consumed = 0;		// offset in cmd_list->clip_rect_buffer. each PushClipRect command consume 1 of those.
 		while (pcmd <= pcmd_end)
 		{
 			const ImDrawCmd& cmd = *pcmd++;
@@ -132,7 +130,6 @@
 }
 
 // Shader sources
-// FIXME-OPT: clip at vertex level
 const GLchar* vertexSource =
     "#version 150 core\n"
 	"uniform mat4 MVP;"
@@ -164,6 +161,7 @@
 	"   o_col.w *= (step(ClipRect.x,pixel_pos.x) * step(ClipRect.y,pixel_pos.y) * step(pixel_pos.x,ClipRect.z) * step(pixel_pos.y,ClipRect.w));"			// Clipping: branch-less, set alpha 0.0f
     "}";
 
+// GLFW callbacks to get events
 static void glfw_error_callback(int error, const char* description)
 {
     fputs(description, stderr);
@@ -251,7 +249,6 @@
 	io.SetClipboardTextFn = ImImpl_SetClipboardTextFn;
 	io.GetClipboardTextFn = ImImpl_GetClipboardTextFn;
 
-
 	// Setup graphics backend
 	GLint status = GL_TRUE;
 	GLenum err = GL_NO_ERROR;
@@ -394,7 +391,7 @@
 			ImGui::End();
 		}
 
-        // 3) Render
+        // 3) Rendering
         glClearColor(0.8f, 0.6f, 0.6f, 1.0f);
         glClear(GL_COLOR_BUFFER_BIT);
 		ImGui::Render();
@@ -403,6 +400,5 @@
 	}
 
 	Shutdown();
-
 	return 0;
 }