Ejemplo n.º 1
0
u8 *BAG_Display_LoadPng(const char *filename, int *wd, int *ht){
	u8* buffer = NULL;
	u8* image = NULL;
	size_t buffersize = 0, imagesize = 0;

	LodePNG_Decoder pngDecoder;
	memset(&pngDecoder, 0, sizeof(LodePNG_Decoder));

	if(!LodePNG_loadFile ( &buffer, &buffersize, filename )){
		LodePNG_Decoder_init (&pngDecoder);
		LodePNG_decode( &pngDecoder, &image, &imagesize, buffer, buffersize ); /*decode the png*/

    *wd = pngDecoder.infoPng.width;
    *ht = pngDecoder.infoPng.height;

		//_png_fillBuffer(object, image);
	}
	else{
    //BAG_DBG_LibMsg(OPEN_FAIL_MSG, filename);
    printf("Error opening png file: %s\n", filename);
    if(image) free(image);
    image = NULL;
  }

	end:
    LodePNG_Decoder_cleanup(&pngDecoder);
    if(buffer) free(buffer);

	return image;
}
Ejemplo n.º 2
0
static GLuint LoadTexture(const char* filename)
{
    unsigned char* buffer;
    unsigned char* image;
    size_t buffersize, imagesize;
    LodePNG_Decoder decoder;
    LodePNG_loadFile(&buffer, &buffersize, filename);
    LodePNG_Decoder_init(&decoder);
    decoder.infoRaw.color.colorType = 0;
    decoder.infoRaw.color.bitDepth = 8;
    LodePNG_Decoder_decode(&decoder, &image, &imagesize, buffer, buffersize);
    pezCheck(!decoder.error, "error %u: %s\n", decoder.error, LodePNG_error_text(decoder.error));
    int bpp = LodePNG_InfoColor_getBpp(&decoder.infoPng.color);
    int bitDepth = decoder.infoPng.color.bitDepth;
    int colorChannels = LodePNG_InfoColor_getChannels(&decoder.infoPng.color);
    pezCheck(bpp == 8 && bitDepth == 8 && colorChannels == 1);
    int w = decoder.infoPng.width;
    int h = decoder.infoPng.height;
    pezPrintString("Loaded %s (%d x %d) bufferSize = %d, imageSize = %d\n", filename, w, h, buffersize, imagesize);

    GLuint handle;
    glGenTextures(1, &handle);
    glBindTexture(GL_TEXTURE_2D, handle);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, w, h, 0, GL_RED, GL_UNSIGNED_BYTE, image);

    free(buffer);
    free(image);
    LodePNG_Decoder_cleanup(&decoder);

    pezCheck(OpenGLError);
    return handle;
}