Chcę wczytać kilka plików Wavefront 3D Object (.obj) do aplikacji OpenGL. Przykładowy plik z niezbyt dużym obiektem ma 177 KB i 4730 linijek. Jak wczytać dane z takiego pliku ze zwróceniem uwagi na wydajność i minimalizację I/O?
- Wczytywanie każdej linii osobno za pomocą fgets lub fscanf
- Wczytanie całego pliku do tablicy znaków char[] i analizowanie każdej linijki
- Inny sposób?
Komentarze zaczynają się od # i takie linijki należy pominąć. Niektóre wartości są opcjonalne. W pierwszym przypadku wczytywanie linijek może zostać przyspieszone przez buforowanie całego pliku, o ile to możliwe. Istnieje funkcja setbuf - czy ona obejmuje również odczytywanie z pliku, czy tylko zapis? W drugim przypadku trzeba pobrać rozmiar pliku (fstat lub fseek+ftell), wczytać go do tablicy znaków, a następnie wydobyć dane. Wydobycie danych prawdopodobnie nie obędzie się bez scanf/fscanf.
Jak do tego podejść, jakie funkcje wykorzystać, aby wczytać dane niewielkim kosztem operacji I/O i procesora?