MCPcopy Create free account
hub / github.com/BinomialLLC/basis_universal / save_dds

Function save_dds

example_transcoding/utils.cpp:598–680  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

596}
597
598bool save_dds(const char* pFilename, uint32_t width, uint32_t height, const void* pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header)
599{
600 (void)srgb;
601
602 FILE* pFile = NULL;
603#ifdef _MSC_VER
604 fopen_s(&pFile, pFilename, "wb");
605#else
606 pFile = fopen(pFilename, "wb");
607#endif
608 if (!pFile)
609 {
610 fprintf(stderr, "Failed creating file %s!\n", pFilename);
611 return false;
612 }
613
614 fwrite("DDS ", 4, 1, pFile);
615
616 DDSURFACEDESC2 desc;
617 memset(&desc, 0, sizeof(desc));
618
619 desc.dwSize = sizeof(desc);
620 desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS;
621
622 desc.dwWidth = width;
623 desc.dwHeight = height;
624
625 desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE;
626 desc.ddpfPixelFormat.dwSize = sizeof(desc.ddpfPixelFormat);
627
628 desc.ddpfPixelFormat.dwFlags |= DDPF_FOURCC;
629
630 desc.lPitch = (((desc.dwWidth + 3) & ~3) * ((desc.dwHeight + 3) & ~3) * pixel_format_bpp) >> 3;
631 desc.dwFlags |= DDSD_LINEARSIZE;
632
633 desc.ddpfPixelFormat.dwRGBBitCount = 0;
634
635 if ((!force_dx10_header) &&
636 ((dxgi_format == DXGI_FORMAT_BC1_UNORM) ||
637 (dxgi_format == DXGI_FORMAT_BC3_UNORM) ||
638 (dxgi_format == DXGI_FORMAT_BC4_UNORM) ||
639 (dxgi_format == DXGI_FORMAT_BC5_UNORM)))
640 {
641 if (dxgi_format == DXGI_FORMAT_BC1_UNORM)
642 desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '1');
643 else if (dxgi_format == DXGI_FORMAT_BC3_UNORM)
644 desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '5');
645 else if (dxgi_format == DXGI_FORMAT_BC4_UNORM)
646 desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '1');
647 else if (dxgi_format == DXGI_FORMAT_BC5_UNORM)
648 desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '2');
649
650 fwrite(&desc, sizeof(desc), 1, pFile);
651 }
652 else
653 {
654 desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', '1', '0');
655

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected