TexConv/main.cpp

95 lines
2.5 KiB
C++
Raw Normal View History

2019-11-26 17:27:48 +08:00
#include<il/il.h>
#include<il/ilu.h>
#include<iostream>
#include"cmd_parse.h"
#include"pixel_format.h"
#include<hgl/type/DataType.h>
#include<hgl/type/StrChar.h>
using namespace hgl;
2019-11-26 17:54:02 +08:00
bool sub_folder =false;
2019-11-26 17:27:48 +08:00
2019-11-26 17:54:02 +08:00
const PixelFormat * pixel_fmt[4] ={nullptr,nullptr,nullptr,nullptr}; //选中格式
bool gen_mipmaps =false; //是否产生mipmaps
2019-11-26 17:27:48 +08:00
2019-11-26 17:54:02 +08:00
bool use_color_key =false; //是否使用ColorKey
uint8 color_key[3]; //ColorKey颜色
const PixelFormat *ParseParamFormat(const cmd_parse &cmd,const char *flag,const PixelFormat *default_format)
2019-11-26 17:27:48 +08:00
{
std::string fmtstr;
if(!cmd.GetString(flag,fmtstr))return(nullptr);
const PixelFormat *result=GetPixelFormat(fmtstr.c_str());
if(result)return(result);
std::cerr<<"[FORMAT ERROR] Don't support \""<<fmtstr.c_str()<<"\" format."<<std::endl;
2019-11-26 17:27:48 +08:00
return default_format;
}
2019-11-26 17:54:02 +08:00
void ParseParamFormat(const cmd_parse &cmd)
2019-11-26 17:27:48 +08:00
{
//指定格式
2019-11-26 17:54:02 +08:00
pixel_fmt[0]=ParseParamFormat(cmd,"/R:", GetPixelFormat(ColorFormat::R8UN));
pixel_fmt[1]=ParseParamFormat(cmd,"/RG:", GetPixelFormat(ColorFormat::RG8UN));
pixel_fmt[2]=ParseParamFormat(cmd,"/RGB:", GetPixelFormat(ColorFormat::RGB565));
pixel_fmt[3]=ParseParamFormat(cmd,"/RGBA:", GetPixelFormat(ColorFormat::RGBA8UN));
for(uint i=0;i<4;i++)
std::cout<<i<<": "<<pixel_fmt[i]->name<<std::endl;
2019-11-26 17:27:48 +08:00
}
2019-11-26 17:54:02 +08:00
void ParamColorKey(const cmd_parse &cmd)
2019-11-26 17:27:48 +08:00
{
std::string ckstr;
if(!cmd.GetString("/ColorKey:",ckstr))return;
char rgbstr[6];
hgl_cpy(rgbstr,ckstr.c_str(),6); //注意hgl_cpy是跨类型复制的不要替换成strcpy或memcpy
ParseHexStr(color_key[0],rgbstr+0);
ParseHexStr(color_key[1],rgbstr+2);
ParseHexStr(color_key[2],rgbstr+4);
use_color_key=true;
}
int main(int argc,char **argv)
{
std::cout<<"Image to Texture Convert tools 1.1"<<std::endl<<std::endl;
if(argc<=1)
{
std::cout<< "Command format:\n"
"\tTexConv [/R:][/RG:][/RGB:][/RGBA:] [/s] [/mip] <filename or pathname>\n"
2019-11-26 17:27:48 +08:00
"\n"
"Params:\n"
"\t/s : proc sub-directory\n"
"\n";
2019-11-26 17:27:48 +08:00
PrintFormatList();
2019-11-26 17:27:48 +08:00
return 0;
}
cmd_parse cp(argc,argv);
2019-11-26 17:54:02 +08:00
if(cp.Find("/s")!=-1)sub_folder=true; //检测是否处理子目录
2019-11-26 17:27:48 +08:00
if(cp.Find("/mip")!=-1)gen_mipmaps=true; //检测是否生成mipmaps
2019-11-26 17:54:02 +08:00
ParamColorKey(cp);
ParseParamFormat(cp); //检测推荐格式
2019-11-26 17:27:48 +08:00
ilInit();
ilShutDown();
return 0;
2019-11-26 17:27:48 +08:00
}