unsigned int APIENTRY pngBind(const char *filename, int mipmap, int trans, pngInfo *info, int wrapst, int minfilter, int magfilter) { unsigned int id = SetParams(wrapst, magfilter, minfilter); if (id != 0 && pngLoad(filename, mipmap, trans, info)) return id; return 0; }
bool Texture::LoadPNG(const char *filename) { unsigned char *image_data; if (1 != pngLoad(filename, &width_, &height_, &image_data, false)) { return false; } GL_CHECK(); glGenTextures(1, &id_); glBindTexture(GL_TEXTURE_2D, id_); SetTextureParameters(ZIM_GEN_MIPS); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width_, height_, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); glGenerateMipmap(GL_TEXTURE_2D); GL_CHECK(); free(image_data); return true; }
void main() { pngInfo info; GLuint texture; glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(300, 300); glutCreateWindow("glpng test"); #if 0 // Using pngLoad and setting texture parameters manually. glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); if (!pngLoad("Stunt.png", PNG_NOMIPMAP, PNG_SOLID, &info)) { puts("Can't load file"); exit(1); } #else // Using pngLoadAndBind to set texture parameters automatically. texture = pngBind("Stunt.png", PNG_NOMIPMAP, PNG_SOLID, &info, GL_CLAMP, GL_NEAREST, GL_NEAREST); if (texture == 0) { puts("Can't load file"); exit(1); } #endif printf("Size=%i,%i Depth=%i Alpha=%i\n", info.Width, info.Height, info.Depth, info.Alpha); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glEnable(GL_CULL_FACE); glColor3f(1, 1, 1); glutKeyboardFunc(KeyPress); glutIdleFunc(Update); glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutMainLoop(); }
void TextureAsset::Load(const std::string &filename, FilterType filter, bool repeatX, bool repeatY) { this->filter = filter; this->repeatX = repeatX; this->repeatY = repeatY; this->filename = filename; // only load png for now pngInfo info; glGenTextures(1, &texID); glBindTexture(GL_TEXTURE_2D, texID); // choose GL_NEAREST or PNG_NOMIPMAPS unsigned int glFilter = GL_NEAREST; if (filter == FILTER_LINEAR) glFilter = GL_LINEAR; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, glFilter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glFilter); unsigned int glRepeatX = repeatX?GL_REPEAT:GL_CLAMP; unsigned int glRepeatY = repeatY?GL_REPEAT:GL_CLAMP; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glRepeatX); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glRepeatY); if (pngLoad(filename.c_str(), PNG_BUILDMIPMAPS, PNG_ALPHA, &info)) { width = info.Width; height = info.Height; Debug::Log("Loaded texture: " + filename); //printf("Size=%i,%i Depth=%i Alpha=%i\n", info.Width, info.Height, info.Depth, info.Alpha); } else { Debug::Log("Can't load texture:"); Debug::Log(filename); width = height = 64; } }
bool Texture::LoadPNG(const char *filename, bool genMips) { unsigned char *image_data; if (1 != pngLoad(filename, &width_, &height_, &image_data, false)) { return false; } GL_CHECK(); glGenTextures(1, &id_); glBindTexture(GL_TEXTURE_2D, id_); SetTextureParameters(genMips ? ZIM_GEN_MIPS : ZIM_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width_, height_, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); if (genMips) { if (gl_extensions.FBO_ARB) { glGenerateMipmap(GL_TEXTURE_2D); } else { #ifndef USING_GLES2 glGenerateMipmapEXT(GL_TEXTURE_2D); #endif } } GL_CHECK(); free(image_data); return true; }
int Skin::load(char *name, bool quiet) { char d[512]; setpath(name); makepath(d,"colors.conf"); if (!Colors.load(d)) { sprintf(d, "Skin[%s]: Cannot load colors.conf", name); if (!quiet) MessageBox(NULL,d,"Error",MB_ICONERROR | MB_OK); return 0; } SDL_Surface *s; pngLoad("toolbar.png"); bmToolbar = new Bitmap( s , true ); pngLoad("load.png"); bmLoad = new Bitmap( s , true ); pngLoad("save.png"); bmSave = new Bitmap( s , true ); pngLoad("buttons.png"); bmButtons = new Bitmap( s , true ); pngLoad("about.png"); bmAbout = new Bitmap( s , true ); if (640 != CONSOLE_WIDTH && 480 != CONSOLE_HEIGHT) { double xscale = (double)CONSOLE_WIDTH / 640; double yscale = (double)CONSOLE_HEIGHT / 480; Drawable ss( zoomSurface(bmAbout->surface, xscale, yscale ,SMOOTHING_ON) , false ); // S->copy(&ss,5,row(12)); SDL_FreeSurface( bmAbout->surface ); bmAbout->surface = ss.surface; } pngLoad("logo.png"); SDL_FreeSurface(s); bmLogo = NULL; makepath(d,"font.fnt"); if (font_load(d)) { sprintf(d, "Skin[%s]: Cannot load font.fnt", name); if (!quiet) MessageBox(NULL,d,"Error",MB_ICONERROR | MB_OK); return 0; } return 1; }
int main(int argc, char **argv) { // Parse command line arguments. const char *FLAGS_infile; const char *FLAGS_outfile; if (argc >= 3) { FLAGS_infile = argv[1]; FLAGS_outfile = argv[2]; } else { fprintf(stderr, "ERROR: Not enough parameters.\n"); printusage(); return 1; } int flags = 0; bool format_set = false; for (int i = 3; i < argc; i++) { if (argv[i][0] != '-') { fprintf(stderr, "Additional arguments must start with '-'\n"); return 1; } switch (argv[i][1]) { case 'm': flags |= ZIM_HAS_MIPS; // Generates mips directly here. We can generate gamma // corrected mips, and mips for ETC1. break; case 'g': flags |= ZIM_GEN_MIPS; break; case 'c': flags |= ZIM_CLAMP; break; case 'f': { for (int j = 0; j < 4; j++) { if (!strcmp(format_strings[j], argv[i] + 3)) { flags |= j; format_set = true; } } } break; } } // TODO: make setting? flags |= ZIM_ETC1_MEDIUM; if ((flags & ZIM_FORMAT_MASK) == ZIM_ETC1) { if (flags & ZIM_GEN_MIPS) { fprintf(stderr, "WARNING: Cannot generate ETC1 mips at runtime\n"); flags &= ~ZIM_GEN_MIPS; } } if (!format_set) { fprintf(stderr, "Must set format\n"); printusage(); return 1; } uint8_t *image_data; int width, height; if (1 != pngLoad(FLAGS_infile, &width, &height, &image_data, FLAGS_flip)) { fprintf(stderr, "Input not a PNG file\n"); printusage(); return 1; } SaveZIM(FLAGS_outfile, width, height, width * 4, flags, image_data); int in_file_size = filesize(FLAGS_infile); int out_file_size = filesize(FLAGS_outfile); fprintf(stdout, "Converted %s to %s. %i b to %i b. %ix%i, %s.\n", FLAGS_infile, FLAGS_outfile, in_file_size, out_file_size, width, height, format_strings[flags & ZIM_FORMAT_MASK]); return 0; }