// ******************************************************************
// Aus Speicherbereich initialisieren
age_Result ageD_D3DEffect::Init(void* pMemory,
					    int iMemorySize)
{
	ageD_VFile* pVFile;

	// Parameter prüfen
	if(pMemory == NULL)		AGE_ERROR_NULL_POINTER("pMemory", AGE_ERROR);
	if(iMemorySize <= 0)	AGE_ERROR_INVALID_VALUE("iMemorySize", AGE_ERROR);


	// Virtuelle Datei erstellen
	pVFile = new ageD_VFile;
	if(pVFile == NULL) AGE_ERROR_OUT_OF_MEMORY(AGE_ERROR);

	// Aus Speicher laden
	if(pVFile->Init(pMemory, iMemorySize))
	{
		// Fehler!
		AGE_ERROR("Fehler beim Erstellen der virtuellen Datei!", AGE_ERROR);
	}

	// Die andere Methode aufrufen
	if(Init(pVFile, pVFile->GetSize()))
	{
		// Fehler!
		AGE_SAFE_DELETE(pVFile);
		AGE_ERROR("Fehler beim Erstellen des Effekts!", AGE_ERROR);
	}

	// Die virtuelle Datei wieder freigeben
	AGE_SAFE_DELETE(pVFile);

	return AGE_OK;
}
// ******************************************************************
// Erstellen aus einer echten Datei
age_Result ageD_D3DEffect::Init(char* pcFilename)
{
	ageD_VFile* pVFile;

	// Parameter prüfen
	if(pcFilename == NULL) AGE_ERROR_NULL_POINTER("pcFilename", AGE_ERROR);


	// Virtuelle Datei erstellen
	pVFile = new ageD_VFile;
	if(pVFile == NULL) AGE_ERROR_OUT_OF_MEMORY(AGE_ERROR);

	// Aus Datei laden
	if(pVFile->Init(pcFilename))
	{
		// Fehler!
		AGE_ERROR("Fehler beim Erstellen der virtuellen Datei!", AGE_ERROR);
	}

	// Die andere Methode aufrufen
	if(Init(pVFile, pVFile->GetSize()))
	{
		// Fehler!
		AGE_ERROR("Fehler beim Erstellen des Effekts!", AGE_ERROR);
	}

	// Die virtuelle Datei wieder freigeben
	AGE_SAFE_DELETE(pVFile);

	return AGE_OK;
}
Exemple #3
0
// ******************************************************************
// Interne Funktion zum Hinzufügen eines Speicherbereichs zur Liste
Result MemAddToList(void* pMemory,
					  int iSize)
{
	MemListEntry					NewEntry;				// Neuer Listeneintrag
	ListEntry<MemListEntry>*	pNewMemoryListEntry;	// Neuer Speicherlisteneintrag

	
	// Parameter prüfen
	if(pMemory == NULL)	AGE_ERROR_NULL_POINTER("pMemory", AGE_ERROR);
	if(iSize < 0)		AGE_ERROR_INVALID_VALUE("iSize", AGE_ERROR);


	// Neuen Listeneintrag ausfüllen
	NewEntry.pMemory = pMemory;
	NewEntry.pUserMemory = (BYTE*)(pMemory) + sizeof(ListEntry<MemListEntry>*);
	NewEntry.iSize = iSize;
	strcpy(NewEntry.acCheck, "TriBase");

	// Eintrag zur Speicherliste hinzufügen
	pNewMemoryListEntry = g_pMemoryList->AddEntry(&NewEntry);
	if(pNewMemoryListEntry == NULL) AGE_ERROR("Fehler beim Erzeugen des neuen Listeneintrags!", AGE_ERROR);

	// Zeiger auf den Speicherlisteneintrag in den Speicher schreiben
	*((ListEntry<MemListEntry>**)(pMemory)) = pNewMemoryListEntry;

	return AGE_OK;
}
// ******************************************************************
// Erstellen aus einem String
age_Result ageD_D3DEffect::Init(char* pcCode,
						int iSize)
{
	HRESULT hResult;

	// Parameter prüfen und sicherstellen, dass Direct3D initialisiert wurde
	if(pcCode == NULL)					AGE_ERROR_NULL_POINTER("pcCode", AGE_ERROR);
	if(iSize == 0 || iSize < -1)		AGE_ERROR_INVALID_VALUE("iSize", AGE_ERROR);
	if(!ageG_Direct3D::IsInitialized())	AGE_ERROR("Direct3D wurde noch nicht initialisiert!", AGE_ERROR);


	// Länge anpassen
	if(iSize == -1) iSize = strlen(pcCode);

	// Jetzt den Effekt erstellen
	if(FAILED(hResult = D3DXCreateEffect(ageG_Direct3D::GetDevice(),
										 pcCode, iSize, NULL, NULL, 0,
										 age_g_pEffectPool, &m_pEffect, NULL)))
	{
		// Fehler!
		AGE_ERROR_DIRECTX("D3DXCreateEffect", hResult, AGE_ERROR);
	}

	// Effektbeschreibung abfragen
	m_pEffect->GetDesc(&m_Desc);

	// Die erste gültige Technik setzen
	SetTechnique(-1);

	return AGE_OK;
}
Exemple #5
0
// ******************************************************************
// Abfragen der Größe eines Speicherbereichs
TRIBASE_API int MemGetSize(void* pMemory)
{
	ListEntry<MemListEntry>* pMemoryListEntry;

	// Parameter prüfen
	if(pMemory == NULL) return -1;

	// Listeneintrag abfragen
	if(MemGetEntry(pMemory, &pMemoryListEntry))
	{
		AGE_ERROR("FEHLER in MemGetSize: Ungültiger Speicherbereich angegeben!", -1);
	}

	// Größe liefern
	return pMemoryListEntry->Data.iSize;
}
Exemple #6
0
	bool Library::load(const std::string &name)
	{
		AGE_ASSERT(handle == nullptr && "Library is not closed");
		std::string libraryName = Library::GenerateName(name);
		if (libraryName.empty())
		{
#if defined(AGE_PLATFORM_WINDOWS)
			handle = GetModuleHandle(nullptr);
#else
			handle = dlopen(nullptr, 0);
#endif
		}
		else
		{
#if defined(AGE_PLATFORM_WINDOWS)
			handle = LoadLibrary(libraryName.c_str());
#else
			handle = dlopen(libraryName.c_str(), RTLD_LAZY);
#endif
			if (!handle)
			{
				libraryName = name;
#if defined(AGE_PLATFORM_WINDOWS)
				handle = LoadLibrary(libraryName.c_str());
#else
				handle = dlopen(libraryName.c_str(), RTLD_LAZY);
#endif
			}
		}
		if (handle != nullptr)
		{
			if (libraryName.empty())
			{
				pluginName = "CurrentProcess";
			}
			else
			{
				pluginName = libraryName;
			}
			return true;
		}
		else
		{
			AGE_ERROR("Impossible to load \"", libraryName, "\" library");
			return false;
		}
	}
// ******************************************************************
// Erstellen aus einer virtuellen Datei
age_Result ageD_D3DEffect::Init(ageD_VFile* pVFile,
						int iSize)
{
	// Parameter prüfen und sicherstellen, dass Direct3D initialisiert wurde
	if(pVFile == NULL)				AGE_ERROR_NULL_POINTER("pVFile", AGE_ERROR);
	if(iSize == 0 || iSize < -1)	AGE_ERROR_INVALID_VALUE("iSize", AGE_ERROR);


	// Länge anpassen
	if(iSize == -1) iSize = pVFile->GetSize();

	// Die andere Methode aufrufen
	if(Init((char*)(pVFile->GetBuffer()) + pVFile->GetCursor(), iSize))
	{
		// Fehler!
		AGE_ERROR("Fehler beim Erstellen des Effekts!", AGE_ERROR);
	}

	return AGE_OK;
}
// ******************************************************************
// Starten eines Effekts
int ageD_D3DEffect::Begin(BOOL bSaveState,		// = TRUE
					BOOL bCaptureOnFinish)	// = TRUE
{
	HRESULT			hResult;
	unsigned int	uiNumPasses;


	// Die Begin-Methode aufrufen
	if(FAILED(hResult = m_pEffect->Begin(&uiNumPasses,
		                                 bSaveState ? 0 : D3DXFX_DONOTSAVESTATE)))
	{
		// Fehler!
		AGE_ERROR("Fehler beim Starten des Effekts!", -1);
	}

	// Angaben kopieren
	m_bStateSaved = bSaveState;
	m_bCaptureOnFinish = bCaptureOnFinish;

	// Anzahl der Durchgänge zurückliefern
	return uiNumPasses;
}
Exemple #9
0
// ******************************************************************
// Funktion zum Reservieren von Speicher
TRIBASE_API void* MemAlloc(int iSize)
{
	void* pMemory;

	// Parameter prüfen
	if(iSize < 0) AGE_ERROR_INVALID_VALUE("iSize", NULL);


	// Speicher reservieren und leeren. Beim Reservieren werden ein
	// paar Bytes mehr gebraucht, damit der Zeiger auf den Listeneintrag
	// mitgespeichert werden kann.
	pMemory = ::operator new(iSize + sizeof(ListEntry<MemListEntry>*));
	if(pMemory == NULL) return NULL;

	g_iByteCounter += iSize + sizeof(ListEntry<MemListEntry>*);
	ZeroMemory(pMemory, iSize + sizeof(ListEntry<MemListEntry>*));

	// Zur Liste hinzufügen
	if(MemAddToList(pMemory, iSize)) AGE_ERROR("Hinzufügen zur Liste fehlgeschlagen!", NULL);

	// Zeiger zurückliefern
	return (BYTE*)(pMemory) + sizeof(ListEntry<MemListEntry>*);
}
Exemple #10
0
// ******************************************************************
// Freigeben eines Speicherbereichs
TRIBASE_API Result MemFree(void* pMemory)
{
	ListEntry<MemListEntry>*	pMemoryListEntry;
	MemListEntry					Entry;


	// Parameter prüfen
	if(pMemory == NULL) AGE_ERROR_NULL_POINTER("pMemory", AGE_ERROR);


	// Listeneintrag abfragen
	if(MemGetEntry(pMemory, &pMemoryListEntry))
	{
		AGE_ERROR("Ungültiger Speicherbereich angegeben!", AGE_ERROR);
	}

	// Speicher und Listeneintrag löschen
	Entry = pMemoryListEntry->Data;
	g_iByteCounter -= Entry.iSize + sizeof(ListEntry<MemListEntry>*);
	::operator delete(Entry.pMemory);
	g_pMemoryList->DeleteEntry(pMemoryListEntry);

	return AGE_OK;
}