Пример #1
0
/** Dato il path, carica la texture e restituisce l'id */
unsigned GlCanvas::loadTexture(char *path)
{
    /* Carica l'immagine png in memoria, usando la libreria pnglite */
    png_t png;
    unsigned int id;

    png_init(malloc, free);

    if(png_open_file_read(&png, path) != PNG_NO_ERROR)
        return 0;

    unsigned char *data = (unsigned char *) malloc(png.width * png.height * png.bpp);

    png_get_data(&png, (unsigned char *) data);


    /* Crea la texture in opengl */
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);

    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, png.bpp, png.width, png.height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

    /* Libera la risorsa png */
    png_close_file(&png);

    free(data);

    /* Restituisce l'id della texture */
    return id;
}
Пример #2
0
static void LoadTexture()
{
    png_t gandhi;
    unsigned char* data;
    GLuint textureHandle;

    png_init(0, 0);
    png_open_file_read(&gandhi, "../demo/Gandhi.png");
    data = (unsigned char*) malloc(gandhi.width * gandhi.height * gandhi.bpp);
    png_get_data(&gandhi, data);

    glGenTextures(1, &textureHandle);
    glBindTexture(GL_TEXTURE_2D, textureHandle);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, gandhi.width, gandhi.height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    png_close_file(&gandhi);
    free(data);
}
Пример #3
0
static Colour *buffer_from_png(const char *filename, int *width, int *height)
{
	unsigned char *data;
	Colour *buffer;
	png_t png;

	png_init(NULL, NULL);

	if (png_open_file_read(&png, filename) != PNG_NO_ERROR)
	{
		printf("Couldn't open file %s\n", filename);
		return NULL;
	}
	*width = png.width;
	*height = png.height;
	assert(png.bpp == 4 || png.bpp == 3);

	data = calloc(png.width * png.height * png.bpp, 1);
	int ret = png_get_data(&png, data);
	if (ret != PNG_NO_ERROR)
	{
		printf("%d\n", ret);
		free(data);
		printf("Error getting data from png %s\n", filename);
		return NULL;
	}

	if (png.bpp == 4)
		buffer = colour_buffer_from_rgba(data, png.width, png.height);
	else
		buffer = colour_buffer_from_rgb(data, png.width, png.height);

	free(data);

	return buffer;
}