Entries for tag "c++", ordered from most recent. Entry count: 152.
# Hello Scene !
Mon
24
Sep 2007
Poczytałem trochę o demoscenie i napisałem swoje pierwsze intro 4k. Nie jest wprawdzie zbyt ambitne, bo pokazuje tylko trójkąt, ale na początek dobre i to :) Najlepsze, że zajmuje tylko 1082 bajty. Do pobrania: HelloScene.exe.

Comments | #demoscene #c++ #rendering Share
# Własne słowa kluczowe w Visual C++
Wed
19
Sep 2007
Chcesz, żeby edytor w Visual C++ podświetlał jakieś twoje dodatkowe identyfikatory jako słowa kluczowe? Da się zrobić. Wystarczy:
Jakie słowa wpisać? Na przykład twoje lub nie twoje nazwy najczęściej używanych typów (string, DWORD, uint16 itp.) albo makr. Pewnie masz wiele swoich pomysłów.
Comments | #visual studio #c++ Share
# Zlib i jego interfejs
Tue
28
Aug 2007
Zlib to biblioteka do kompresji danych. Zdawało by się, że jest prosta - jej zasadniczą funkcjonaloność, czyli kompresję albo dekompresję kawałka pamięci wykonuje się używając jednej prostej funkcji. Okazuje się jednak, że poprawne używanie tej funkcji jest nie lada sztuką, a jej objaśnienie wypełnia całkiem niekrótki artykuł (ze względu na różne przypadki szczególne i tak nie do końca). Choć taki a nie inny wygląd tej funkcji ma swoje uzasadnienie w sposobie, w jaki działa, to wg mnie możnaby go podawać jako książkowy przykład jak *nie* należy projektować interfejsu biblioteki.
Jeśli ktoś, zamiast usiłować zrozumieć zasadę działania funkcji inflate i deflate, chce zobaczyć jak obudować te funkcje w wygodne klasy strumieni, może podpatrzeć kod modułu ZlibUtils z mojej biblioteki CommonLib 6.1. Szczegóły:
Comments | #c++ #libraries Share
# Sortowanie wg typu
Fri
17
Aug 2007
Mamy wektor wskaźników na obiekty różnych typów dziedziczących ze wspólnej klasy bazowej. Jak posortować go wg typu? Właśnie wymyśliłem, że do porównywania elementów wektora można wtedy użyć takiego uniwersalnego funktora:
template <typename T>
struct TypeCompare
{
bool operator () (const T *o1, const T *o2)
{
return &typeid(*o1) < &typeid(*o2);
}
};
Przykładowy program: Sortowanie_wg_typu.cpp.
Comments | #c++ #algorithms Share
# Rozwiązania dla relacji zawierania
Sat
04
Aug 2007
Innym problemem projektowym jest realizacja wszelkiego rodzaju kontenerów przechowujących jakieś elementy, np. Scena przechowuje Encje, Światła, Materiały, Manager Zasobów przechowuje Zasoby itp.

Autor diagramu: Xion
# Compile (Ctrl+F7)
Tue
17
Jul 2007
To drobiazg, pewnie każdy o nim wie. Jeśli by ktoś jednak nie wiedział, warto się dowiedzieć, że w Visual C++ bardzo przydatne jest polecenie Compile (Ctrl+F7). Kompiluje tylko bieżący plik CPP, a nie cały projekt. Dzięki temu możesz szybko sprawdzić, czy napisany kod się kompiluje bez błędów i...
Odkryłem to polecenie już dawno temu, ale dopiero teraz uświadomiłem sobie, że jego potęga wcale nie musi być taka oczywista na pierwszy rzut oka.
Comments | #visual studio #c++ Share
# Nigdy nie ufaj optymalizacji kompilatora
Sat
30
Jun 2007
Xion widząc kod mojej biblioteki CommonLib zarzucił mi dzisiaj, że niepotrzebnie przesyłam wszelkie zwracane przez funkcje obiekty większe niż pojedyncza liczba (jak wektor, macierz czy string) przez parametr wskaźnikowy nie ufając optymalizacji kompilatora (nazwał to RVO - Return Value Optimization). Zrobiłem więc na szybko prosty test na przykładzie stringów i wyniki potwierdziły mój pogląd, żeby nigdy nie ufać optymalizacjom kompilatora. Zobacz kod i wyniki: TestNieoptymalizacjiKompilatora.cpp.
Może dożyję czasów, kiedy kompilatory C++ (albo lepiej - jakiegoś nowocześniejszego języka) pozwolą napisać po prostu return wektor * macierz1 * macierz2 albo return string1 + string2, a to zostanie zamienione na taki kod maszynowy, jaki napisałby dobry programista posługujący się bezpośrednio liczbami float albo łańcuchami char*. Przykład kompilatorów HLSL i Cg pokazuje, że da się...
Comments | #c++ #algorithms Share
# Napisałem FreeList
Thu
31
May 2007
Napisałem na podstawie artykułów z "Game Programming Gems" (oraz swoich pomysłów) własne alokatory pamięci do obiektów konkretnego typu, czyli tzw. FreeList. Powinny działać szybciej niż standardowe, podobno wolne operatory new i delete. Znajdą się oczywiście w nowej wersji mojej biblioteki CommonLib. Testy (przeprowadzone dla 10240 operacji alokacji lub zwalniania) są bardzo optymistyczne:
DEBUG: Element typu int: FreeList : 68.0636 ms DynamicFreeList : 184.441 ms new i delete : 78.8142 ms Element typu zajmujacego 1024 bajty: FreeList : 69.3896 ms DynamicFreeList : 203.506 ms new i delete : 93.2942 ms RELEASE: Element typu int: FreeList : 7.87224 ms DynamicFreeList : 11.4786 ms new i delete : 17.0348 ms Element typu zajmujacego 1024 bajty: FreeList : 9.18059 ms DynamicFreeList : 18.0729 ms new i delete : 24.0537 ms