All pastes #269762 Raw Edit

Something

public c v1 · immutable
·published 2006-12-06 20:12 UTC
rendered paste body
UINT LoadTexturePNG(LPSTR pszFilename){	UINT uTexture = 0;	INT iWidth, iHeight, iBitDepth, iColorType, iRowBytes, i;	BOOL bHasAlpha;	FILE *hTexture;	UCHAR sig[8];	LPBYTE pbData;	LPBYTE *pbRowPointers;	png_structp png_ptr;	png_infop info_ptr;	hTexture = fopen(pszFilename, "rb");	fread(&sig, 1, 8, hTexture);	if(!png_check_sig(sig, 8)){		//Not a png file		fclose(hTexture);		return 0;	}	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);	info_ptr = png_create_info_struct(png_ptr);	if(setjmp(png_ptr->jmpbuf)){		png_destroy_read_struct(&png_ptr, &info_ptr, NULL);		fclose(hTexture);		return 0;	}	png_init_io(png_ptr, hTexture);	png_set_sig_bytes(png_ptr, 8);	png_read_info(png_ptr, info_ptr);	png_get_IHDR(png_ptr, info_ptr, (LPUINT)&iWidth, (LPUINT)&iHeight, &iBitDepth, &iColorType, NULL, NULL, NULL);	if(iColorType == PNG_COLOR_TYPE_PALETTE){		png_set_expand(png_ptr);	}	if(iColorType == PNG_COLOR_TYPE_GRAY || iColorType == PNG_COLOR_TYPE_GRAY_ALPHA){		png_set_gray_to_rgb(png_ptr);	}	if(info_ptr->color_type & PNG_COLOR_MASK_ALPHA || png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)){		bHasAlpha = TRUE;	}else{		bHasAlpha = FALSE;	}	if(iBitDepth == 16){		png_set_strip_16(png_ptr);	}	png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);	png_read_update_info(png_ptr, info_ptr);	iRowBytes = png_get_rowbytes(png_ptr, info_ptr);	pbData = (LPBYTE)GlobalAlloc(GPTR, iRowBytes * iHeight);	pbRowPointers = (LPBYTE)GlobalAlloc(GPTR, iHeight * sizeof(LPBYTE));	for(i = 0; i < iHeight; i++){		pbRowPointers[i] = pbData + i * iRowBytes;	}	png_read_image(png_ptr, pbRowPointers);	png_read_end(png_ptr, NULL);	//Make a texture (finally)	glGenTextures(1, &uTexture);	glBindTexture(GL_TEXTURE_2D, uTexture);	glTexImage2D(GL_TEXTURE_2D, 0, (bHasAlpha? 4 : 3), iWidth, iHeight, 0, (bHasAlpha? GL_RGB : GL_RGBA), GL_UNSIGNED_BYTE, pbData);	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);	GlobalFree(pbRowPointers);	GlobalFree(pbData);	png_destroy_read_struct(&png_ptr, &info_ptr, NULL);	fclose(hTexture);	return uTexture;}