Du bist nicht angemeldet.

Suchergebnisse

Suchergebnisse 1-7 von insgesamt 7.

Werbeanzeige

12.05.2017, 16:19

Forenbeitrag von: »Gottfried«

Software-Update Juli 2017: Alle Projekte aus dem Buch "3D-Spieleprogrammierung" für Visual C++ 2017 & DirectX-SDK Juni 2010

Hab in der Engine einen Fehler entdeckt, welcher aber schon in der Vorigen drinnen ist in der tbTextureManager.cpp: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 10 11 12 13 // Fehler beim Laden! if(iNumTries >= 8) TB_ERROR_DIRECTX("D3DXCreateTextureFromFileInMemoryEx", hResult, NULL); switch(iNumTries) { case 1: Format = D3DFMT_A8R8G8B8; case 2: Format = D3DFMT_A1R5G5B5; case 3: Format = D3DFMT_X8R8G8B8; case 4: Format = D3DFMT_R8G8B8; case 5: Format = D3DFMT_R5G6B5; case 6: Format = D3DFMT_X1R5G5B5; case...

21.06.2016, 23:09

Forenbeitrag von: »Gottfried«

'WTF'-Codeschnipsel

Aber man sollte das eh nicht nehmen, da die "typedef long LONG;" beim gcc mit 64-Bit Architektur dann 64-Bit hat. Am Besten man nimmt die vom Standard: uint_least8_t, uint_least16_t usw. wenn man mit Architekturen mit ungleich 8 Bit Bytes arbeitet oder das kleinste Wort 32-Bit hat und andere Derivate. Ansonsten nehme ich uint8_t, uint16_t, int8_t, int16_t ... bzw. uint_fast8_t, int_fast8_t usw. Aber bei MS war ja bis mindestens VS2008 dieser Standard nicht enthalten. War schon seit C99 Standard,...

19.06.2016, 23:14

Forenbeitrag von: »Gottfried«

Array mit einem Zeigern an eine Funktion übergeben

Ja, aber beim 1. sind nur zwei Multiplikationen, erste mit imul und zweite mit [eax*4] Beim 2. ist zusätzlich der lea und eine adition dazugekommen [ecx+edx*4]. 1. benötigt nur 2 Register eax und ecx. 2. benötigt ein zusätzliches edx Und bei den wenigen Registern die ein Intel hat ... Aber es gibt ja noch den 64-Bit Modus wo endlich mal 8 zusätzliche Register dazugekommen sind (R8-R15)

19.06.2016, 16:06

Forenbeitrag von: »Gottfried«

'WTF'-Codeschnipsel

Finde das immer noch amüsant im WinNT.h C-/C++-Quelltext 1 2 3 4 5 #define VOID void typedef char CHAR; typedef short SHORT; typedef long LONG; typedef int INT; Kommt wohl noch von der Zeit wo es noch kein Syntax-Highlighting gab? Oder Quellcode 1 #ifndef NDEBUG

19.06.2016, 15:50

Forenbeitrag von: »Gottfried«

Array mit einem Zeigern an eine Funktion übergeben

Zitat von »dot« Zitat von »Gottfried« Der Kompiler macht auch nichts anderes als die übergebenen Werte zu Multiplizieren. Was genau meinst du damit? Im Assembly code sieht man dann Multiplikationen oder Shift-Operationen, damit die CPU die Speicherstelle des Elements, auf das Zugegriffen wird, errechnet wird. Das zeigt mir der Dissasembler an bei einem int array (int = 4 Bytes) C-/C++-Quelltext 1 2 3 4 5 6 int val = arr[x+(breite*y)]; 00AC16DF mov eax,dword ptr [breite] 00AC16E5 imul eax,dword ...

18.06.2016, 22:52

Forenbeitrag von: »Gottfried«

Array mit einem Zeigern an eine Funktion übergeben

Hab das Datum erst danach gesehen. Dieses Beispiel soll zeigen, dass die Funktion foo einen Zeiger bekommt auf ein eindimensionales Array. Es könnte genausogut so aussehen: C-/C++-Quelltext 1 2 3 4 int array1[2][3]; foo(array1, 2, 3); foo(array1, 3, 2); Ausserdem kann man keine mehrdimensionalen Felder mit new anlegen (ausser mit C++11). Und im Stack wird man wohl kaum ein größeres Feld erstellen und global erst recht nicht, da hier die Größe schon festgelegt sein muss. Um ein dynamisches Feld m...

17.06.2016, 23:31

Forenbeitrag von: »Gottfried«

Array mit einem Zeigern an eine Funktion übergeben

Das mit den mehrdimensionalen Feldern sollte man wieder vergessen. Hier kann es sehr leicht zu fehlerhaften Verhalten des Programmes kommen. Als Beispiel: C-/C++-Quelltext 1 2 3 4 5 6 7 void foo(int *ptr, int zeilen, int spalten); int array2d[2][2] = { {1, 2}, {3, 4} }; int array3d[2][3] = { {1, 2, 3}, {4, 5, 6} }; foo(&array2d[0][0], 2, 2); foo(&array3d[0][0], 2, 3); Was berechnet hier nun die Funktion foo? Besser ist das ganze in eine Struktur zu packen, das wird übersichtlicher und ist ein wa...

Werbeanzeige