From 33a6f3f6e49432d3a3e2b41bd7e6ed1003dd0f9f Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 3 Dec 2019 21:24:23 +0800 Subject: [PATCH] delete TGATexture --- example/Vulkan/CMakeLists.txt | 4 +- example/Vulkan/HQFilterTexture.cpp | 4 +- example/Vulkan/TGATexture.cpp | 277 ------------------ res/image/noise32.tga | Bin 3611 -> 1068 bytes .../Vulkan/POD/VKTextureLoader.cpp | 1 + 5 files changed, 5 insertions(+), 281 deletions(-) delete mode 100644 example/Vulkan/TGATexture.cpp diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index c203b2b0..ce4056c8 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -12,8 +12,8 @@ endmacro() CreateProject(00.triangle first_triangle.cpp) CreateProject(01.indices_rect indices_rect.cpp) CreateProject(02.1.texture_rect texture_rect.cpp) -#CreateProject(02.2.texture_linear texture_linear.cpp TGATexture.cpp) -CreateProject(03.HQFilterTexture HQFilterTexture.cpp TGATexture.cpp) +#CreateProject(02.2.texture_linear texture_linear.cpp) +CreateProject(03.HQFilterTexture HQFilterTexture.cpp) CreateProject(04.Geometry2D Geometry2D.cpp) CreateProject(05.Geometry3D Geometry3D.cpp) CreateProject(06.SceneTree SceneTree.cpp) diff --git a/example/Vulkan/HQFilterTexture.cpp b/example/Vulkan/HQFilterTexture.cpp index e0c185ca..00dd55f6 100644 --- a/example/Vulkan/HQFilterTexture.cpp +++ b/example/Vulkan/HQFilterTexture.cpp @@ -10,7 +10,7 @@ using namespace hgl; using namespace hgl::graph; VK_NAMESPACE_BEGIN -Texture2D *LoadTGATexture(const OSString &filename,Device *device,bool use_optimal=true); +Texture2D *CreateTextureFromFile(Device *device,const OSString &filename,bool use_optimar=true); VK_NAMESPACE_END constexpr uint32_t SCREEN_WIDTH=512; @@ -131,7 +131,7 @@ private: bool InitTexture() { - texture=vulkan::LoadTGATexture(OS_TEXT("res/image/noise32.tga"),device); + texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/noise32.Tex2D")); return texture; } diff --git a/example/Vulkan/TGATexture.cpp b/example/Vulkan/TGATexture.cpp deleted file mode 100644 index 85b4c1e9..00000000 --- a/example/Vulkan/TGATexture.cpp +++ /dev/null @@ -1,277 +0,0 @@ -#include -#include -#include -#include -#include - -VK_NAMESPACE_BEGIN -namespace -{ - namespace tga - { - enum class ImageType:uint8 - { - ColorMap=1, - TrueColor=2, - Grayscale=3 - }; - - enum class VerticalDirection:uint - { - BottomToTop=0, - TopToBottom=1 - }; - - #pragma pack(push,1) - struct Header - { - uint8 id; - uint8 color_map_type; - ImageType image_type; // 1 colormap image ,2 true-color,3 grayscale - - uint16 color_map_first; - uint16 color_map_length; - uint8 color_map_size; - - uint16 x_origin; - uint16 y_origin; - - uint16 width; - uint16 height; - uint8 bit; - - uint8 image_desc; - }; - - union ImageDesc - { - //不要把此union放到上面的struct中,否则Visual C++会将此union编译成4字节。GCC无此问题 - uint8 image_desc; - struct - { - uint alpha_depth:4; - uint horizontal_directon:1; // 水平方向(不支持该参数) - VerticalDirection vertical_direction:1; // 0 bottom to top,1 top to bottom - }; - }; - #pragma pack(pop) - }//namespace tga - - void RGB8to565(uint16 *target,uint8 *src,uint size) - { - for(uint i=0;i>3); - - ++target; - src+=3; - } - } - - template - void RGB2RGBA(T *tar,T *src,uint size,const T alpha) - { - for(uint i=0;i - void BGR2RGBASwap(T *tar,T *src,uint size,const T alpha) - { - for(uint i=0;i - void BGR2FloatRGBASwap(T *tar,S *src,uint size,const T max_value,const T alpha) - { - for(uint i=0;i - void UInteger2Float(void *ptr,uint size,const T max_value) - { - T *tar=(T *)ptr; - S *src=(S *)ptr; - - for(uint i=0;i failed.")); - return(nullptr); - } - - const int64 file_length=fis->GetSize(); - - if(file_length<=sizeof(tga::Header)) - { - LOG_ERROR(OS_TEXT("[ERROR] file<")+filename+OS_TEXT("> length < sizeof(tga::Header).")); - return(nullptr); - } - - tga::Header header; - tga::ImageDesc image_desc; - - if(fis->Read(&header,sizeof(tga::Header))!=sizeof(tga::Header)) - return(false); - - const uint pixel_count =header.width*header.height; //象素数量 - const uint pixel_byte =header.bit>>3; //单个象素字节数 - const uint line_bytes =header.width*pixel_byte; //每行字节数 - const uint total_bytes =header.height*line_bytes; //总字节数 - - if(file_length length error.")); - return(nullptr); - } - - image_desc.image_desc=header.image_desc; - - VkFormat format=FMT_UNDEFINED; - - if(header.image_type==tga::ImageType::TrueColor) - { - if(header.bit==24)format=FMT_BGRA8UN;else - if(header.bit==32)format=FMT_BGRA8UN;else - if(header.bit==48)format=FMT_RGBA16UN;else - if(header.bit==64)format=FMT_RGBA16UN; - } - else - if(header.image_type==tga::ImageType::Grayscale) - { - if(header.bit== 8)format=FMT_R8UN;else - if(header.bit==16)format=FMT_R16UN;else - if(header.bit==32)format=FMT_R32F; - } - - if(format==FMT_UNDEFINED) - { - LOG_ERROR(OS_TEXT("[ERROR] Image format error,filename: ")+filename); - return(nullptr); - } - - vulkan::Buffer *buf; - - if(header.image_type==tga::ImageType::TrueColor - &&(header.bit==24||header.bit==48||header.bit==72)) - { - uint8 *pixel_data=new uint8[total_bytes]; - - fis->Read(pixel_data,total_bytes); - - if(image_desc.vertical_direction==tga::VerticalDirection::BottomToTop) - SwapRow((uint8 *)pixel_data,line_bytes,header.height); - - const uint new_pixel_byte=((header.bit>>3)/3)*4; - - buf=device->CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,pixel_count*new_pixel_byte); - - if(new_pixel_byte==4) - { - RGB2RGBA((uint8 *)buf->Map(),pixel_data,pixel_count,HGL_U8_MAX); - format=FMT_BGRA8UN; - } - else - if(new_pixel_byte==8) - { - BGR2RGBASwap((uint16 *)buf->Map(),(uint16 *)pixel_data,pixel_count,HGL_U16_MAX); - format=FMT_RGBA16UN; - } - else - if(new_pixel_byte==16) - { - BGR2FloatRGBASwap((float *)buf->Map(),(uint32 *)pixel_data,pixel_count,(float)HGL_U32_MAX,1.0f); - format=FMT_RGBA32F; - } - - buf->Unmap(); - } - else - { - vulkan::Buffer *buf=device->CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,total_bytes); - - uint8 *pixel_data=(uint8 *)buf->Map(); - - fis->Read(pixel_data,total_bytes); - - if(header.image_type==tga::ImageType::Grayscale&&header.bit==32) - UInteger2Float(pixel_data,pixel_count,(float)HGL_U32_MAX); - - if(image_desc.vertical_direction==tga::VerticalDirection::BottomToTop) - SwapRow((uint8 *)pixel_data,line_bytes,header.height); - - buf->Unmap(); - } - - Texture2D *tex; - - if(use_optimar) - { - tex=device->CreateTexture2D(format,buf,header.width,header.height); - delete buf; - } - else - { - //device->CreateTexture2DLinear(format,buf,header.width, header.height); - } - - if(tex) - { - LOG_INFO(OS_TEXT("load image file<")+filename+OS_TEXT(">:<")+OSString(header.width)+OS_TEXT("x")+OSString(header.height)+OS_TEXT("> to texture ok")); - } - else - { - LOG_ERROR(OS_TEXT("load image file<")+filename+OS_TEXT(">:<")+OSString(header.width)+OS_TEXT("x")+OSString(header.height)+OS_TEXT("> to texture failed.")); - } - - return(tex); -} -VK_NAMESPACE_END diff --git a/res/image/noise32.tga b/res/image/noise32.tga index da9eeb4cd310085cd4caba799d4fd6661fb9ae03..b1195fe63c97713f28fb68e75bc18093e92a611f 100644 GIT binary patch literal 1068 zcmXw(3ry8@6vuzfnP^NY7a1{~U`kCP<6&X}yNC=W zxN>nVKtYkvgk(S$93e<}g_4&+i-!|=gXk`w&fm?m{ddm!{?7OJJLmk)@2}JX^-xx- zmCDLW@zooK$=pIx$WdRA+Siv)8O+b+Qqz*((8UJ_`;DDj4Z-#pcpWZmdv7(1&fw%#-7tJx$=$LP&C#V zqw3-C!1J8#TNlx-(P~Fc71J&7T>iEZ%~#pGVb-Ziv+@5}08|GX#mV|FTtTM*Ua#Hd zW``EAXzKk^f907 zSCRY*9B@xRYJ*w%<0phmo<%$!E0tKdNCim-+mwR+bDtHzcpb+11rpH;Wcq$@2EqMM zXO8>9NIq_y+Tm1ItYviN2|4<_G>`7kh>{_KULUeN19O>a{3zhvkqwK42gz|~)SE=? z3qhGF0xu40bP*LVyXXtAQN9&RBvwnJ0iUG2)Z=@r;p z<1ZCtvZvB7ct529?1X<%w*-uW#!&{f&G*2g%m>n`jIV~bIi;;WKmkmI8l^AO=et9j z(#3Mou3myKL5A>Wh!IccL1%Rn{EPEh&SAmc4C*5;A$5f~i_u{Tkeq2W@A~=x zxSkP|LaeuovNt7-`$X7OH}I5?i^3Oq5PVxr$m)03)(7)WhLQ<)r8ulYSdXn0Mk0BY zn3MDDv%O_xU^C5vwlqFM{qe+eFkGZc;Ay=JZ#M=Kb*##fcnaMN(2Ba!rS@f45Gjn# z_o{3}ts(cMOOhCBS68dTxn!Al`}Zx}{>~#Umd*aLJ+?T~!*Y^qrzFZv>%j}sF$+)D zMbKN_BVZIE(K({@GWj!X5`9O|S?vCRgN}z-#m{-1K-~)qLVG)Zru_ZzZ{Y76;JHQT Qr}Oc4`Dndvqvsm+KZwTDp#T5? literal 3611 zcmeH}c~H)46vy8hrjVg9E@sTjs2CHbNn{LzDHB(FgwRFEnuKKRYnCWllzk@@8T-Dk zsm79hDZ0jzwd~zbzWPn~pF4B^xqsc~ojLD$&hI?uInVbw%VRQGn#zaSWH$X)HYqJF zU9@PCudi=cH=pfhXMEci8R*8KT%?B2bb>G9*op^P6t zeth}zg@y1}u3X8>%R?b2CnrBYA4&iI{a375!8&;CzkT}_=J4UeUAlB>(4YZo0|pGZ zbLS31hLe-i(xpqq-@A7Y=D~vpl`2)bcJ12Jr%xrHG-=Y^yLaJBN=jC?c%6-e&l;=)}_nKDJN8%x+?+qP}<=FO7?=bfFMFI>1_D2N$8e0W4egm@hp z`tadHBm)NylpMNc%a#`}UQC=gQ94LC2vpOMkdPiddJrK6x7w{9I2 zv!Kcm&Ye5AaN)xF^XG#D2=l3L-@beH?8(l~wzIQ){rWW$>}=Su!NI`+9zUUH&z{8& zz!DYr@84%%gvR}5W@ZvjNW8thQQN$EbDcVMn4*cP5hF&xhlPbfH7;Gc#HL&{(|Yyl z;SY?WiwuItNhmi6O-f42$jC68&7>h45z+w2VGkWT)V_Utwm^r$>7b`ho%%T|O-xLL zsTiV6LFwDKZ={b>AUr%=$;hXytSn5$#l?}@pn*iG-L-31c#?GH%$Wqni4!N}HbRY? zH*eOjU*7=y%$YM7DgRhXaE>28J~}#@P=EF66>>K9^74ZJ{{6e7qoXuA5umMIyO!zB zojZ-?$hoHA;9x5&D+%#a4B)fTv17+T*w4=oA-ND68#`{?ICz9A8iu#T9&(j3S*S?S zkB^U+gcEW5ls;KFdGaJ^^9hHEG#KiJjg1Y=v}w~=s8vvZe}5C>kZMNBoKqM{-rBXubX^71cb|CCBh5r^~w z783b=`t$(-TU%R04YR@x9m*`BOA_hS9Fz1!6U30nH+>2X4J87}Wlqt!apT&xYmXW= z3QeO@8TMh6Rs>Z{Ow7oUBNg6kr;4o$!Ypz^-O|!>!GZ;fB7{^zERd3d5x|ur2-zL_ z=FJA8ZaAHtfcY8}9DzQeZoFp*CuYf?5pTa=E1Z z*s){P#n?i1VD{|UQZ6hkgkg!UQan)W>-Fo`!5kixBoW237^)=LFfKubmn-YD}Fv)sQ!B z+LTU25hi#DT}oNqx^+3e`f{U2jS$kr1(8wYjXJ}292{$4%UuKp26}pWvX-1h$P@rs zYrInQ7@)TEz#zK~535(N-mP0V!z+~$fFjHgayssjyue%9-{8T6rD$~EHns67KlxaXf0BaR^R0%p44~CX4Tk=U&6eMXJ z_@lLY)M1U%%2N<#$&w|kQiH3AHgVFcS1+uofoi#eki+r}zyVGwITTYQ6gKI|@JM*V z;WNttft+2vdbJ7*eIz9%g=YXsp@utj=ulD;p2+7OS=*{rE2y5Ayh!2Miv(BcX39`Q z)Lu;6wQC1eR;qV5Y}k-uLYyGS6rqBBcn#o!AsC286?vv)z2aQ29pw?PAVW?`|F!;S zXMv}o7}><58qYZ$ay^jt@87Q^QWM8pIsy@;s6)+ovvD=VDuu4d0CreateTexture2D(format,buf,file_header.width,file_header.height); + delete buf; return tex; } else