Index: code/bmpman/bmpman.cpp
===================================================================
--- code/bmpman/bmpman.cpp	(revision 5709)
+++ code/bmpman/bmpman.cpp	(working copy)
@@ -53,6 +53,7 @@
 
 bitmap_entry bm_bitmaps[MAX_BITMAPS];
 
+int loaded_bitmaps = 0;
 int bm_texture_ram = 0;
 int bm_inited = 0;
 int Bm_paging = 0;
@@ -291,6 +292,8 @@
 
 		bm_free_data(i);  	// clears flags, bbp, data, etc
 	}
+
+	loaded_bitmaps = 0;
 }
 
 // Returns number of bytes of bitmaps locked this frame
@@ -385,6 +388,8 @@
 
 	gr_bm_create(n);
 
+	loaded_bitmaps++;
+
 	return bm_bitmaps[n].handle;
 }
 
@@ -578,6 +583,8 @@
 	if (img_cfp != NULL)
 		cfclose(img_cfp);
 
+	loaded_bitmaps++;
+
 	return handle;
 }
 
@@ -985,6 +992,7 @@
 			sprintf( bm_bitmaps[n+i].filename, "%s[%d]", filename, i );
 		}
 
+		loaded_bitmaps++;
 	}
 
 	if (nframes)
@@ -1821,6 +1829,8 @@
 			bm_bitmaps[first+i].info.ani.first_frame = -1;
 
 			bm_bitmaps[first+i].handle = -1;
+
+			loaded_bitmaps--;
 		}
 	} else {
 		bm_free_data(n, true);		// clears flags, bbp, data, etc
@@ -1844,6 +1854,8 @@
 		bm_bitmaps[n].info.ani.first_frame = -1;
 
 		bm_bitmaps[n].handle = -1;
+
+		loaded_bitmaps--;
 	}
 
 	return 1;
@@ -2720,6 +2732,8 @@
 	}
 	//	bm_update_memory_used( n, bm_bitmaps[n].mem_taken );
 
+	loaded_bitmaps++;
+
 	return bm_bitmaps[n].handle;
 }
 
Index: code/freespace2/freespace.cpp
===================================================================
--- code/freespace2/freespace.cpp	(revision 5709)
+++ code/freespace2/freespace.cpp	(working copy)
@@ -2556,6 +2556,12 @@
 			gr_printf( sx, sy, NOX("VRAM: %d KB\n"), (GL_textures_in + GL_vertex_data_in)/1024 );
 			sy += dy;
 		}
+
+		{
+			extern int loaded_bitmaps;
+			gr_printf( sx, sy, NOX("BMPs: %d/%d\n"), loaded_bitmaps, MAX_BITMAPS );
+			sy += dy;
+		}
 	}
 
 
