You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.2 KiB

// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2014 Alec Jacobson <alecjacobson@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.
#include "texture_from_tga.h"
#include "tga.h"
#include <cstring>
IGL_INLINE bool igl::opengl::texture_from_tga(const std::string tga_file, GLuint & id)
{
using namespace std;
// read pixels to tga file
FILE * imgFile;
// "-" as input file name is code for read from stdin
imgFile = fopen(tga_file.c_str(),"r");
if(NULL==imgFile)
{
printf("IOError: %s could not be opened...",tga_file.c_str());
return false;
}
// gliReadTGA annoyingly uses char * instead of const char *
size_t len = tga_file.length();
char* tga_file_char = new char [ len + 1 ];
strcpy( tga_file_char, tga_file.c_str() );
// read image
gliGenericImage* img = gliReadTGA(imgFile, tga_file_char, 0, 0);
// clean up filename buffer
delete[] tga_file_char;
fclose( imgFile );
// set up texture mapping parameters and generate texture id
glGenTextures(1,&id);
glBindTexture(GL_TEXTURE_2D, id);
// Texture parameters
float empty[] = {1.0f,1.0f,1.0f,0.0f};
glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_BORDER_COLOR,empty);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
// GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
// OpenGL by default tries to read data in multiples of 4, if our data is
// only RGB or BGR and the width is not divible by 4 then we need to alert
// opengl
if((img->width % 4) != 0 &&
(img->format == GL_RGB ||
img->format == GL_BGR))
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
}
// Load texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->width,
img->height, 0, img->format, GL_UNSIGNED_BYTE,
img->pixels);
return id;
}
#ifdef IGL_STATIC_LIBRARY
// Explicit template instantiation
#endif