On Thu, May 10, 2012 at 10:32 AM, Stefan Dösinger <stefandoesin...@gmx.at> wrote: > Am Mittwoch, 9. Mai 2012, 23:32:05 schrieb Józef Kucia: >> + *pitch = width * format_desc->bytes_per_pixel; >> + *size = *pitch * height; > Usually surface pitches are either 4 or 8 byte aligned(depending on the API > and pool). I recommend to write some tests for this. The most likely > problematic formats are D3DFMT_P8, any 16 bit format like R5G6B5 and 24 bit > R8G8B8. Maybe you're supposed to honor the pitch_or_linear_size member of the > DDSURFACEDESC.
Surfaces pitches doesn't seem to be 4 or 8 byte aligned in DDS files. MSDN recommends to not use pitch_or_linear_size and gives formulas for computing pitches [1]. When it comes to formats mentioned by you, D3DFMT_P8 doesn't seem to be supported in DDS files. The formula from this patch also works for the dds_16bit file which stores pixels in D3DFMT_X1R5G5B5 format. Besides that, the patches series seems to work pretty well with at least two real applications. On the other hand, writing more tests is a good idea. [1] - http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991%28v=vs.85%29.aspx