Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Neues Material aus der gleichen Datei lesen tbResult tbModel::ChangeMaterial(DWORD dwOldEffect, DWORD dwNewEffect) { // Alten Effekt-Header speichern tbModelEffectHeader OldEffectHeader; OldEffectHeader = m_pEffects[dwOldEffect].Header; // Effekt überschreiben m_pEffects[dwOldEffect] = m_pEffects[dwNewEffect]; // Alten Effekt-Header wieder einsetzen (Effektname und Größe des Effektcodes aus dem neuen Effekt nehmen) m_pEffects[dwOldEffect].Header = OldEffectHeader; strcpy(m_pEffects[dwOldEffect].Header.acName, m_pEffects[dwNewEffect].Header.acName); m_pEffects[dwOldEffect].Header.dwEffectCodeSize = m_pEffects[dwNewEffect].Header.dwEffectCodeSize; return TB_OK; } |
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 // Struktur für den Header eines einzelnen Effekts struct TRIBASE_API tbModelEffectHeader { char acName[256]; // Name des Effekts BOOL bAlphaBlended; // Mit Alpha-Blending rendern? D3DPRIMITIVETYPE PrimitiveType; // Typ der Primitiven DWORD dwStartIndex; // Wo mit dem Rendern anfangen? DWORD dwNumPrimitives; // Wie viele Primitiven rendern? DWORD dwMinIndex; // Kleinster verwendeter Index DWORD dwNumVertices; // Größter Index - Kleinster Index + 1 DWORD dwEffectCodeSize; // Größe des Effektquellcodes }; // ****************************************************************** // Struktur für einen Effekt in einem Modell struct TRIBASE_API tbModelEffect { tbModelEffectHeader Header; // Effektheader char* pcCode; // Quellcode tbEffect* pEffect; // Effektklasse DWORD dwNumTextures; // Anzahl der Texturen PDIRECT3DBASETEXTURE9 apTexture[8]; // Max. 8 Texturen }; // ****************************************************************** // Klasse für Effekte class TRIBASE_API tbEffect { private: // Variablen LPD3DXEFFECT m_pEffect; // Die Effektschnittstelle D3DXEFFECT_DESC m_Desc; // Effektbeschreibung BOOL m_bStateSaved; // Wurde der Status gespeichert? BOOL m_bCaptureOnFinish; // Capture nach dem Effekt aufrufen? int m_iLastPass; public: // Konstruktor und Destruktor tbEffect(); ~tbEffect() {Exit();} // Methoden tbResult Init(char* pcCode, int iSize); // Aus String erstellen tbResult Init(tbVFile* pVFile, int iSize); // Aus virtueller Datei initialisieren tbResult Init(char* pcFilename); // Aus Datei initialisieren tbResult Init(void* pMemory, int iMemorySize); // Aus Speicher initialisieren tbResult Init(HMODULE hModule, char* pcRessourceName, char* pcResourceType); // Aus Ressource initialisieren tbResult Exit(); tbResult SetTechnique(int iTechnique = -1); // Wählt eine Technik int Begin(BOOL bSaveState = TRUE, BOOL bCaptureOnFinish = TRUE); // Effekt starten tbResult End(); // Effekt beenden tbResult Pass(int iPass); // Durchgang aktivieren // Inline-Methoden LPD3DXEFFECT GetEffect() {return m_pEffect;} int GetNumTechniques() {return m_Desc.Techniques;} };
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
// Herunterfahren tbResult tbModel::Exit() { char acVariable[256]; if(!m_bExtraDataOnly) { // Puffer löschen TB_SAFE_DELETE(m_pVertexBuffer); TB_SAFE_DELETE(m_pIndexBuffer); // Effekte löschen for(DWORD dwEffect = 0; dwEffect < m_dwNumEffects; dwEffect++) { // Texturen freigeben for(DWORD dwTex = 0; dwTex < m_pEffects[dwEffect].dwNumTextures; dwTex++) { if(m_pEffects[dwEffect].apTexture[dwTex]) { // Texturvariable im Effekt zurücksetzen, damit die Texturschnittstelle // freigegeben wird (mit SetTexture wurde der Referenzzähler erhöht) sprintf(acVariable, "Texture%d", dwTex + 1); m_pEffects[dwEffect].pEffect->GetEffect()->SetTexture(acVariable, NULL); // Den Texturmanager auffordern, die Textur freizugeben if(!tbTextureManager::IsInitialized()) tbTextureManager::Instance().ReleaseTexture(m_pEffects[dwEffect].apTexture[dwTex]); } } // Den Code und die Effektklasse löschen TB_SAFE_MEMFREE(m_pEffects[dwEffect].pcCode); TB_SAFE_DELETE(m_pEffects[dwEffect].pEffect); } // Effekt-Array löschen TB_SAFE_MEMFREE(m_pEffects); // Lichter löschen TB_SAFE_MEMFREE(m_pLights); } } |
C-/C++-Quelltext |
|
1 |
#define TB_SAFE_DELETE(x) {if((x)) {delete (x); (x) = NULL;}} // Sicheres Löschen |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Patrick Z.« (04.05.2017, 15:09)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Da ist kein Bild. Zumindest sehe ich da nur ein kaputtes Bild.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Genau in der Zeile, wo dir der Debugger das Problem anzeigt.Wo soll ich den Breakpoint setzen?
Genau in der Zeile, wo dir der Debugger das Problem anzeigt.Wo soll ich den Breakpoint setzen?
Werbeanzeige