load Bitmaps in OpenGL



  • Hi,

    Mit dieser Funktion lade ich ein BMP-File

    unsigned char* LoadBitmapFile (char* filename, BITMAPINFOHEADER* bitmapInfoHeader)
    {
        unsigned int imageIdx;
        FILE* filePtr;
        BITMAPFILEHEADER bitmapFileHeader;
        unsigned char *bitmapImage;
        unsigned char tempRGB;
    
        filePtr = fopen (filename, "rb");
        if (filePtr == NULL)
        {
            return NULL;
        }
        fread (&bitmapFileHeader, sizeof (BITMAPFILEHEADER), 1, filePtr);
    
        if (bitmapFileHeader.bfType != BITMAP_ID)
        {
            fclose (filePtr);
            return NULL;
        }
        fread (bitmapInfoHeader, sizeof (BITMAPINFOHEADER), 1, filePtr);
    
        fseek (filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
    
        bitmapImage = (unsigned char*) malloc (bitmapInfoHeader->biSizeImage);
    
        if (!bitmapImage)
        {
            free (bitmapImage);
            fclose (filePtr);
            return NULL;
        }
    
        fread (bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr);
    
        if (bitmapImage == NULL)
        {
            fclose (filePtr);
            return NULL;
        }
    
        for (imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx += 3)
        {
            tempRGB = bitmapImage[imageIdx];
            bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
            bitmapImage[imageIdx + 2] = tempRGB;
        }
    
        fclose (filePtr);
        return bitmapImage;
    }
    

    Nach dem Laden will ich es darstellen:

    if (bitmapData != NULL)
            {
                glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
                glRasterPos2i (200, 200);
                glDrawPixels (bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
            }
    

    Doch wenn ich die (vorhandene) Bitmap lade, kehrt das Programm sofort in Windows zurück.
    Worin liegt mein Fehler?



  • liefert diese funktion einen gültigen pointer zurück ?
    was sagt glGetError() dazu ?
    was sagt windows dazu GetLastError() ?
    wo bricht dein programm ab ?

    du müsstest etwas genauer dein prob beschreiben.


Anmelden zum Antworten