Problem med pak system.
Hejsa eksperter.puha, den bliver lang den her :)
Jeg har den her pak system som jeg har modificeret fra en fundet på gamedev.
Nu vil jeg så gerne loade en fil fra pak systemet ind i memory til at bruge som directx texture.
jeg har lavet så den loader data ud, og også så den skriver det rigtig til fil (inde i selve pak systemed), MEN, når jeg får data tilbage til min class, viser den at størrelsen er 4 byte hele tiden, uanset hvad.
men ok, først, her er pak (hente enkelt fil fra pak til hukommelsen)
char * CPakFile::ReadSingleFileByte( char* Filename )
{
// Declare local variables
FILE* ReadStream; // A read data stream
fpos_t Pos = 0; // Offset in to file
char Buffer = 0; // A read buffer
// Error check the method parameters and PAK file acquired from LoadPAKHFT()
if( strlen(m_szPakName) == 0 ){ return FALSE; }
if( strlen(Filename) == 0 ){ return FALSE; }
// Declare a temporary file table node to work from
sFileTableEntry* Current = new sFileTableEntry();
// Make it the top of the file table
Current = m_FileTable;
// Iterate through Current until it is the entry specified in the method parameters
while( strcmp(Current->szFileName, Filename) != 0 )
{
// If we reach the dummy table entry we have to leave unsuccessfully
if( Current->Next == NULL ){ return FALSE; }
// Advance Current to the next entry
Current = Current->Next;
}
// Open PAK file stream (to read from)
ReadStream = fopen( m_szPakName, "rb" );
if( !ReadStream )
return FALSE;
// Set the offset in PAK to the beginning of this particular file
// to be extracted
Pos = Current->dwOffset;
fsetpos( ReadStream, &Pos );
int size = (int)Current->dwFileSize;
char * fBuffer = new char[size]; // A read buffer
char* buf_ptr= fBuffer;
// Loop through the file by it's size and read from the PAK
// followed by write to file
for( DWORD Count = 0; Count < Current->dwFileSize; Count++ )
{
// Read in the char
Buffer = fgetc(ReadStream);
// Perform decryption using the caesar cypher (reversed to decrypt)
if( m_Header.bCypherAddition == TRUE )
Buffer -= m_Header.iCypherValue;
else
Buffer += m_Header.iCypherValue;
// Write to the buffer
memcpy(buf_ptr, (char*)&Buffer, 1);
buf_ptr+=1;
}
// Close the file streams
fclose(ReadStream);
return fBuffer;
}
hvis jeg skriver indholdet ud lige før fclose, så er filen komplet og virker fint.
MEN, hvis jeg returner den, så får jeg 4 byte.
og det gør jeg her f.eks
int LoadingScreen::InitTexture()
{
pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE ); // Enable Z-Buffer (Depth Buffer)
pD3DDevice->SetRenderState(D3DRS_CULLMODE, FALSE); // Disable Backface Culling
pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); // Disable Light
unsigned char *pVertices;
pD3DDevice->CreateVertexBuffer(4*sizeof(tVertex), 0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_MANAGED, &pVertexBuffer, NULL );
pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);
memcpy(pVertices, quad, sizeof(quad) );
pVertexBuffer->Unlock();
char * data;
if ( pak.LoadPAKHFT( "Data/System.mpk" ) )
{
data = pak.ReadSingleFileByte("Loading1.jpg");
if ( data == NULL )
{
MessageBox( NULL, "Error Loading Resources", "Error", MB_OK | MB_ICONINFORMATION );
exit(1);
}
int size = sizeof(data);
ofstream test("test.txt", ios::out | ios::binary);
test << size;
}
else
{
MessageBox( NULL, "Error Loading Resource File", "Error", MB_OK | MB_ICONINFORMATION );
exit(1);
}
ectect...
anyways, med
int size = sizeof(data);
ofstream test("test.txt", ios::out | ios::binary);
siger den i min txt fil, 4 byte
også hvis jeg prøver strlen(data); det er det samme
nogen ide til hvad der går galt ? hvordan jeg fikser det ?