każde wywołanie update() to u ciebie poważny wyciek pamięci
tworzysz vertex buffera w InitVB, wypełniasz go wierzchołkami ładnie
ale w tym miejscu kończy się ładnie, teraz przy dodawaniu nowego trójkąta, czyli metoda update, TWORZYSZ NOWEGO VERTEX BUFFERA, NIE ZWALNIAJĄC POPRZEDNIEGO, a nadpisując wskaźnik, wskutek czego bezpowrotnie tracisz możliwość odwołania się do poprzedniego...
wyjście 1:
na początku każdego update, zwalniaj vertex buffera, zanim utworzysz nowego, czyli wystarczy że wywołasz g_Vertex->Release();
wyjście 2:
tworzenie na nowo vertex buffera za każdym razem jest w ogóle bez sensu, tworzysz go raz w InitVB, a w update żeby dorwać się do danych wystarczy wywołać samo Lock, uzyskując wskaźnik na dane w vertex bufferze, bez niepotrzebnego tworzenia na nowo vertex buffera
wyjście 3:
w ogóle vertex buffera powinieneś raz wypełnić i potem już go nie ruszać, a wszelkie przesunięcia, obroty i inne egzotyczne przekształcenia, robić modyfikując macierz świata (czyli pozycję na scenie) dla każdego trójkąta, a takich macierzy w ogóle w ciebie nie zauważyłem