feat: updated engine
This commit is contained in:
parent
cbe99774ff
commit
f4cf6b3999
6607 changed files with 910135 additions and 430025 deletions
|
|
@ -164,6 +164,8 @@ enum DDSFormat {
|
|||
DDS_LUMINANCE,
|
||||
DDS_LUMINANCE_ALPHA,
|
||||
DDS_LUMINANCE_ALPHA_4,
|
||||
DDS_RG8,
|
||||
DDS_R8,
|
||||
DDS_MAX
|
||||
};
|
||||
|
||||
|
|
@ -223,4 +225,6 @@ static const DDSFormatInfo dds_format_info[DDS_MAX] = {
|
|||
{ "GRAYSCALE", false, 1, 1, Image::FORMAT_L8 },
|
||||
{ "GRAYSCALE_ALPHA", false, 1, 2, Image::FORMAT_LA8 },
|
||||
{ "GRAYSCALE_ALPHA_4", false, 1, 1, Image::FORMAT_LA8 },
|
||||
{ "RG8", false, 1, 2, Image::FORMAT_RG8 },
|
||||
{ "R8", false, 1, 1, Image::FORMAT_R8 },
|
||||
};
|
||||
|
|
|
|||
|
|
@ -343,8 +343,8 @@ Vector<uint8_t> save_dds_buffer(const Ref<Image> &p_img) {
|
|||
|
||||
Ref<Image> image = p_img;
|
||||
|
||||
stream_buffer->put_32(DDS_MAGIC);
|
||||
stream_buffer->put_32(DDS_HEADER_SIZE);
|
||||
stream_buffer->put_u32(DDS_MAGIC);
|
||||
stream_buffer->put_u32(DDS_HEADER_SIZE);
|
||||
|
||||
uint32_t flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_PITCH | DDSD_LINEARSIZE;
|
||||
|
||||
|
|
@ -352,13 +352,13 @@ Vector<uint8_t> save_dds_buffer(const Ref<Image> &p_img) {
|
|||
flags |= DDSD_MIPMAPCOUNT;
|
||||
}
|
||||
|
||||
stream_buffer->put_32(flags);
|
||||
stream_buffer->put_u32(flags);
|
||||
|
||||
uint32_t height = image->get_height();
|
||||
stream_buffer->put_32(height);
|
||||
stream_buffer->put_u32(height);
|
||||
|
||||
uint32_t width = image->get_width();
|
||||
stream_buffer->put_32(width);
|
||||
stream_buffer->put_u32(width);
|
||||
|
||||
DDSFormat dds_format = _image_format_to_dds_format(image->get_format());
|
||||
const DDSFormatInfo &info = dds_format_info[dds_format];
|
||||
|
|
@ -372,18 +372,18 @@ Vector<uint8_t> save_dds_buffer(const Ref<Image> &p_img) {
|
|||
pitch = width * info.block_size;
|
||||
}
|
||||
|
||||
stream_buffer->put_32(pitch);
|
||||
stream_buffer->put_32(depth);
|
||||
stream_buffer->put_u32(pitch);
|
||||
stream_buffer->put_u32(depth);
|
||||
|
||||
uint32_t mipmaps = image->get_mipmap_count() + 1;
|
||||
stream_buffer->put_32(mipmaps);
|
||||
stream_buffer->put_u32(mipmaps);
|
||||
|
||||
uint32_t reserved = 0;
|
||||
for (int i = 0; i < 11; i++) {
|
||||
stream_buffer->put_32(reserved);
|
||||
stream_buffer->put_u32(reserved);
|
||||
}
|
||||
|
||||
stream_buffer->put_32(DDS_PIXELFORMAT_SIZE);
|
||||
stream_buffer->put_u32(DDS_PIXELFORMAT_SIZE);
|
||||
|
||||
uint32_t pf_flags = 0;
|
||||
|
||||
|
|
@ -399,22 +399,22 @@ Vector<uint8_t> save_dds_buffer(const Ref<Image> &p_img) {
|
|||
pf_flags = DDPF_FOURCC;
|
||||
}
|
||||
|
||||
stream_buffer->put_32(pf_flags);
|
||||
stream_buffer->put_u32(pf_flags);
|
||||
|
||||
bool needs_pixeldata_swap = false;
|
||||
|
||||
if (format_type == DDFT_BITMASK) {
|
||||
// Uncompressed bitmasked.
|
||||
stream_buffer->put_32(0); // FourCC
|
||||
stream_buffer->put_u32(0); // FourCC
|
||||
|
||||
uint32_t bit_count, r_mask, g_mask, b_mask, a_mask;
|
||||
_get_dds_pixel_bitmask(image->get_format(), bit_count, r_mask, g_mask, b_mask, a_mask);
|
||||
|
||||
stream_buffer->put_32(bit_count);
|
||||
stream_buffer->put_32(r_mask);
|
||||
stream_buffer->put_32(g_mask);
|
||||
stream_buffer->put_32(b_mask);
|
||||
stream_buffer->put_32(a_mask);
|
||||
stream_buffer->put_u32(bit_count);
|
||||
stream_buffer->put_u32(r_mask);
|
||||
stream_buffer->put_u32(g_mask);
|
||||
stream_buffer->put_u32(b_mask);
|
||||
stream_buffer->put_u32(a_mask);
|
||||
|
||||
if (image->get_format() == Image::FORMAT_RGBA4444 || image->get_format() == Image::FORMAT_RGB8) {
|
||||
needs_pixeldata_swap = true;
|
||||
|
|
@ -422,40 +422,40 @@ Vector<uint8_t> save_dds_buffer(const Ref<Image> &p_img) {
|
|||
} else if (format_type == DDFT_FOURCC) {
|
||||
// FourCC.
|
||||
uint32_t fourcc = _image_format_to_fourcc_format(image->get_format());
|
||||
stream_buffer->put_32(fourcc);
|
||||
stream_buffer->put_u32(fourcc);
|
||||
|
||||
stream_buffer->put_32(0); // Bit count
|
||||
stream_buffer->put_32(0); // R Bitmask
|
||||
stream_buffer->put_32(0); // G Bitmask
|
||||
stream_buffer->put_32(0); // B Bitmask
|
||||
stream_buffer->put_32(0); // A Bitmask
|
||||
stream_buffer->put_u32(0); // Bit count
|
||||
stream_buffer->put_u32(0); // R Bitmask
|
||||
stream_buffer->put_u32(0); // G Bitmask
|
||||
stream_buffer->put_u32(0); // B Bitmask
|
||||
stream_buffer->put_u32(0); // A Bitmask
|
||||
} else {
|
||||
// DXGI format and DX10 header.
|
||||
stream_buffer->put_32(DDFCC_DX10);
|
||||
stream_buffer->put_u32(DDFCC_DX10);
|
||||
|
||||
stream_buffer->put_32(0); // Bit count
|
||||
stream_buffer->put_32(0); // R Bitmask
|
||||
stream_buffer->put_32(0); // G Bitmask
|
||||
stream_buffer->put_32(0); // B Bitmask
|
||||
stream_buffer->put_32(0); // A Bitmask
|
||||
stream_buffer->put_u32(0); // Bit count
|
||||
stream_buffer->put_u32(0); // R Bitmask
|
||||
stream_buffer->put_u32(0); // G Bitmask
|
||||
stream_buffer->put_u32(0); // B Bitmask
|
||||
stream_buffer->put_u32(0); // A Bitmask
|
||||
}
|
||||
|
||||
uint32_t caps1 = info.compressed ? DDSD_LINEARSIZE : DDSD_PITCH;
|
||||
stream_buffer->put_32(caps1);
|
||||
stream_buffer->put_u32(caps1);
|
||||
|
||||
stream_buffer->put_32(0); // Caps2
|
||||
stream_buffer->put_32(0); // Caps3
|
||||
stream_buffer->put_32(0); // Caps4
|
||||
stream_buffer->put_32(0); // Reserved 2
|
||||
stream_buffer->put_u32(0); // Caps2
|
||||
stream_buffer->put_u32(0); // Caps3
|
||||
stream_buffer->put_u32(0); // Caps4
|
||||
stream_buffer->put_u32(0); // Reserved 2
|
||||
|
||||
if (format_type == DDFT_DXGI) {
|
||||
// DX10 header.
|
||||
uint32_t dxgi_format = _image_format_to_dxgi_format(image->get_format());
|
||||
stream_buffer->put_32(dxgi_format);
|
||||
stream_buffer->put_32(DX10D_2D);
|
||||
stream_buffer->put_32(0); // Misc flags 1
|
||||
stream_buffer->put_32(1); // Array size
|
||||
stream_buffer->put_32(0); // Misc flags 2
|
||||
stream_buffer->put_u32(dxgi_format);
|
||||
stream_buffer->put_u32(DX10D_2D);
|
||||
stream_buffer->put_u32(0); // Misc flags 1
|
||||
stream_buffer->put_u32(1); // Array size
|
||||
stream_buffer->put_u32(0); // Misc flags 2
|
||||
}
|
||||
|
||||
for (uint32_t mip_i = 0; mip_i < mipmaps; mip_i++) {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
#include "image_saver_dds.h"
|
||||
#include "texture_loader_dds.h"
|
||||
|
||||
#include "core/io/resource_loader.h"
|
||||
#include "core/object/class_db.h"
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
static Ref<ResourceFormatDDS> resource_loader_dds;
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@
|
|||
|
||||
#include "core/config/project_settings.h"
|
||||
#include "core/io/dir_access.h"
|
||||
#include "core/io/file_access.h"
|
||||
#include "core/io/image.h"
|
||||
#include "tests/core/config/test_project_settings.h"
|
||||
#include "tests/test_macros.h"
|
||||
#include "tests/test_utils.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
#include "core/io/file_access.h"
|
||||
#include "core/io/file_access_memory.h"
|
||||
#include "core/object/class_db.h"
|
||||
#include "scene/resources/image_texture.h"
|
||||
|
||||
DDSFormat _dxgi_to_dds_format(uint32_t p_dxgi_format) {
|
||||
|
|
@ -75,7 +76,9 @@ DDSFormat _dxgi_to_dds_format(uint32_t p_dxgi_format) {
|
|||
case DXGI_R32_FLOAT: {
|
||||
return DDS_R32F;
|
||||
}
|
||||
case DXGI_R8_UNORM:
|
||||
case DXGI_R8_UNORM: {
|
||||
return DDS_R8;
|
||||
}
|
||||
case DXGI_A8_UNORM: {
|
||||
return DDS_LUMINANCE;
|
||||
}
|
||||
|
|
@ -89,7 +92,7 @@ DDSFormat _dxgi_to_dds_format(uint32_t p_dxgi_format) {
|
|||
return DDS_R16I;
|
||||
}
|
||||
case DXGI_R8G8_UNORM: {
|
||||
return DDS_LUMINANCE_ALPHA;
|
||||
return DDS_RG8;
|
||||
}
|
||||
case DXGI_R9G9B9E5: {
|
||||
return DDS_RGB9E5;
|
||||
|
|
@ -648,6 +651,10 @@ static Vector<Ref<Image>> _dds_load_images_from_buffer(Ref<FileAccess> p_f, DDSF
|
|||
r_dds_format = DDS_BGRX8;
|
||||
} else if (format_rgb_bits == 32 && format_red_mask == 0xff && format_green_mask == 0xff00 && format_blue_mask == 0xff0000) {
|
||||
r_dds_format = DDS_RGBX8;
|
||||
} else if (format_rgb_bits == 8 && format_red_mask == 0xff && format_green_mask == 0 && format_blue_mask == 0) {
|
||||
r_dds_format = DDS_R8;
|
||||
} else if (format_rgb_bits == 16 && format_red_mask == 0xff && format_green_mask == 0xff00 && format_blue_mask == 0) {
|
||||
r_dds_format = DDS_RG8;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue