Merge pull request #38076 from DrMoriarty/fix_pvrtc
iOS: Fix multiple issues with PVRTC import, disable ETC1
This commit is contained in:
commit
8ca9680b13
5 changed files with 34 additions and 11 deletions
|
@ -5898,7 +5898,7 @@ void RasterizerStorageGLES2::initialize() {
|
||||||
config.float_texture_supported = config.extensions.has("GL_ARB_texture_float") || config.extensions.has("GL_OES_texture_float");
|
config.float_texture_supported = config.extensions.has("GL_ARB_texture_float") || config.extensions.has("GL_OES_texture_float");
|
||||||
config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc");
|
config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc");
|
||||||
config.etc1_supported = config.extensions.has("GL_OES_compressed_ETC1_RGB8_texture") || config.extensions.has("WEBGL_compressed_texture_etc1");
|
config.etc1_supported = config.extensions.has("GL_OES_compressed_ETC1_RGB8_texture") || config.extensions.has("WEBGL_compressed_texture_etc1");
|
||||||
config.pvrtc_supported = config.extensions.has("IMG_texture_compression_pvrtc") || config.extensions.has("WEBGL_compressed_texture_pvrtc");
|
config.pvrtc_supported = config.extensions.has("GL_IMG_texture_compression_pvrtc") || config.extensions.has("WEBGL_compressed_texture_pvrtc");
|
||||||
config.support_npot_repeat_mipmap = config.extensions.has("GL_OES_texture_npot");
|
config.support_npot_repeat_mipmap = config.extensions.has("GL_OES_texture_npot");
|
||||||
|
|
||||||
#ifdef JAVASCRIPT_ENABLED
|
#ifdef JAVASCRIPT_ENABLED
|
||||||
|
|
|
@ -1298,6 +1298,30 @@ String EditorExportPlatform::test_etc2() const {
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String EditorExportPlatform::test_etc2_or_pvrtc() const {
|
||||||
|
|
||||||
|
String driver = ProjectSettings::get_singleton()->get("rendering/quality/driver/driver_name");
|
||||||
|
bool driver_fallback = ProjectSettings::get_singleton()->get("rendering/quality/driver/fallback_to_gles2");
|
||||||
|
bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc2");
|
||||||
|
bool pvrtc_supported = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc");
|
||||||
|
|
||||||
|
if (driver == "GLES2" && !pvrtc_supported) {
|
||||||
|
return TTR("Target platform requires 'PVRTC' texture compression for GLES2. Enable 'Import Pvrtc' in Project Settings.");
|
||||||
|
} else if (driver == "GLES3") {
|
||||||
|
String err;
|
||||||
|
if (!etc2_supported && !pvrtc_supported) {
|
||||||
|
err += TTR("Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings.");
|
||||||
|
}
|
||||||
|
if (driver_fallback && !pvrtc_supported) {
|
||||||
|
if (err != String())
|
||||||
|
err += "\n";
|
||||||
|
err += TTR("Target platform requires 'PVRTC' texture compression for the driver fallback to GLES2.\nEnable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback Enabled'.");
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return String();
|
||||||
|
}
|
||||||
|
|
||||||
int EditorExport::get_export_preset_count() const {
|
int EditorExport::get_export_preset_count() const {
|
||||||
|
|
||||||
return export_presets.size();
|
return export_presets.size();
|
||||||
|
|
|
@ -265,6 +265,7 @@ public:
|
||||||
virtual Ref<Texture> get_run_icon() const { return get_logo(); }
|
virtual Ref<Texture> get_run_icon() const { return get_logo(); }
|
||||||
|
|
||||||
String test_etc2() const; //generic test for etc2 since most platforms use it
|
String test_etc2() const; //generic test for etc2 since most platforms use it
|
||||||
|
String test_etc2_or_pvrtc() const; // test for etc2 or pvrtc support for iOS
|
||||||
virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0;
|
virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0;
|
||||||
|
|
||||||
virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const = 0;
|
virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const = 0;
|
||||||
|
|
|
@ -215,10 +215,12 @@ static void _compress_pvrtc4(Image *p_img) {
|
||||||
int ofs, size, w, h;
|
int ofs, size, w, h;
|
||||||
img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
|
img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
|
||||||
Javelin::RgbaBitmap bm(w, h);
|
Javelin::RgbaBitmap bm(w, h);
|
||||||
for (int j = 0; j < size / 4; j++) {
|
void *dst = (void *)bm.GetData();
|
||||||
|
copymem(dst, &r[ofs], size);
|
||||||
Javelin::ColorRgba<unsigned char> *dp = bm.GetData();
|
Javelin::ColorRgba<unsigned char> *dp = bm.GetData();
|
||||||
/* red and Green colors are swapped. */
|
for (int j = 0; j < size / 4; j++) {
|
||||||
new (dp) Javelin::ColorRgba<unsigned char>(r[ofs + 4 * j + 2], r[ofs + 4 * j + 1], r[ofs + 4 * j], r[ofs + 4 * j + 3]);
|
/* red and blue colors are swapped. */
|
||||||
|
SWAP(dp[j].r, dp[j].b);
|
||||||
}
|
}
|
||||||
new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
|
new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
|
||||||
Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
|
Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
|
||||||
|
|
|
@ -165,13 +165,9 @@ public:
|
||||||
void EditorExportPlatformIOS::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
|
void EditorExportPlatformIOS::get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) {
|
||||||
|
|
||||||
String driver = ProjectSettings::get_singleton()->get("rendering/quality/driver/driver_name");
|
String driver = ProjectSettings::get_singleton()->get("rendering/quality/driver/driver_name");
|
||||||
if (driver == "GLES2") {
|
r_features->push_back("pvrtc");
|
||||||
r_features->push_back("etc");
|
if (driver == "GLES3") {
|
||||||
} else if (driver == "GLES3") {
|
|
||||||
r_features->push_back("etc2");
|
r_features->push_back("etc2");
|
||||||
if (ProjectSettings::get_singleton()->get("rendering/quality/driver/fallback_to_gles2")) {
|
|
||||||
r_features->push_back("etc");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<String> architectures = _get_preset_architectures(p_preset);
|
Vector<String> architectures = _get_preset_architectures(p_preset);
|
||||||
|
@ -1515,7 +1511,7 @@ bool EditorExportPlatformIOS::can_export(const Ref<EditorExportPreset> &p_preset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String etc_error = test_etc2();
|
String etc_error = test_etc2_or_pvrtc();
|
||||||
if (etc_error != String()) {
|
if (etc_error != String()) {
|
||||||
valid = false;
|
valid = false;
|
||||||
err += etc_error;
|
err += etc_error;
|
||||||
|
|
Loading…
Reference in a new issue