| 924 | } |
| 925 | |
| 926 | bool FntData::Load(Renderer& renderer, const char* filename) |
| 927 | { |
| 928 | File* fp = NULL; |
| 929 | PxToolkit::fopen_s(&fp, filename, "rb"); |
| 930 | if(!fp) |
| 931 | return false; |
| 932 | |
| 933 | // Init texture |
| 934 | { |
| 935 | const PxU32 width = read32(fp); |
| 936 | const PxU32 height = read32(fp); |
| 937 | PxU8* data = new PxU8[width*height*4]; |
| 938 | const size_t size = width*height*4; |
| 939 | size_t numRead = fread(data, 1, size, fp); |
| 940 | if(numRead != size) { fclose(fp); return false; } |
| 941 | |
| 942 | /* if(gFlip) |
| 943 | { |
| 944 | PxU32* data32 = (PxU32*)data; |
| 945 | for(PxU32 i=0;i<width*height;i++) |
| 946 | { |
| 947 | Flip(data32[i]); |
| 948 | } |
| 949 | }*/ |
| 950 | |
| 951 | RendererTexture2DDesc tdesc; |
| 952 | tdesc.format = RendererTexture2D::FORMAT_B8G8R8A8; |
| 953 | tdesc.width = width; |
| 954 | tdesc.height = height; |
| 955 | tdesc.filter = RendererTexture2D::FILTER_ANISOTROPIC; |
| 956 | tdesc.numLevels = 1; |
| 957 | /* |
| 958 | tdesc.filter; |
| 959 | tdesc.addressingU; |
| 960 | tdesc.addressingV; |
| 961 | tdesc.renderTarget; |
| 962 | */ |
| 963 | PX_ASSERT(tdesc.isValid()); |
| 964 | mTexture = renderer.createTexture2D(tdesc); |
| 965 | PX_ASSERT(mTexture); |
| 966 | if(!mTexture) |
| 967 | { |
| 968 | DELETEARRAY(data); |
| 969 | fclose(fp); |
| 970 | return false; |
| 971 | } |
| 972 | |
| 973 | const PxU32 componentCount = 4; |
| 974 | |
| 975 | if(mTexture) |
| 976 | { |
| 977 | PxU32 pitch = 0; |
| 978 | void* buffer = mTexture->lockLevel(0, pitch); |
| 979 | PX_ASSERT(buffer); |
| 980 | if(buffer) |
| 981 | { |
| 982 | PxU8* levelDst = (PxU8*)buffer; |
| 983 | const PxU8* levelSrc = (PxU8*)data; |
no test coverage detected