Browse Source

Merge branch 'release/1.10.x'

rdb 4 years ago
parent
commit
64f0414f57
2 changed files with 46 additions and 4 deletions
  1. 44 2
      panda/src/glstuff/glGeomMunger_src.cxx
  2. 2 2
      pandatool/src/deploy-stub/deploy-stub.c

+ 44 - 2
panda/src/glstuff/glGeomMunger_src.cxx

@@ -13,6 +13,12 @@
 
 
 #include "dcast.h"
 #include "dcast.h"
 
 
+#ifdef OPENGLES
+#include <atomic>
+
+static std::atomic_flag warned_downgrade_float64 = ATOMIC_FLAG_INIT;
+#endif
+
 TypeHandle CLP(GeomMunger)::_type_handle;
 TypeHandle CLP(GeomMunger)::_type_handle;
 
 
 ALLOC_DELETED_CHAIN_DEF(CLP(GeomMunger));
 ALLOC_DELETED_CHAIN_DEF(CLP(GeomMunger));
@@ -102,6 +108,7 @@ munge_format_impl(const GeomVertexFormat *orig,
       (InternalName::get_vertex(), 3, NT_int16,
       (InternalName::get_vertex(), 3, NT_int16,
        C_point, vertex_type->get_start(), vertex_type->get_column_alignment());
        C_point, vertex_type->get_start(), vertex_type->get_column_alignment());
   }
   }
+#endif  // !OPENGLES
 
 
   // Convert packed formats that OpenGL may not understand.
   // Convert packed formats that OpenGL may not understand.
   for (size_t i = 0; i < orig->get_num_columns(); ++i) {
   for (size_t i = 0; i < orig->get_num_columns(); ++i) {
@@ -123,8 +130,25 @@ munge_format_impl(const GeomVertexFormat *orig,
                                column->get_contents(), column->get_start(),
                                column->get_contents(), column->get_start(),
                                column->get_column_alignment());
                                column->get_column_alignment());
     }
     }
+#ifdef OPENGLES
+    else if (column->get_numeric_type() == NT_float64) {
+      if (!warned_downgrade_float64.test_and_set()) {
+        GLCAT.warning()
+          << "OpenGL ES does not support 64-bit floats; converting vertex data to 32-bit.\n";
+#ifndef NDEBUG
+        if (vertices_float64) {
+          GLCAT.warning()
+            << "You may want to disable vertices-float64 for better performance.\n";
+        }
+#endif
+      }
+      PT(GeomVertexArrayFormat) array_format = new_format->modify_array(array);
+      array_format->add_column(column->get_name(), column->get_num_components(),
+                               NT_float32, column->get_contents(),
+                               column->get_start(), column->get_column_alignment());
+    }
+#endif
   }
   }
-#endif  // !OPENGLES
 
 
   const GeomVertexColumn *color_type = orig->get_color_column();
   const GeomVertexColumn *color_type = orig->get_color_column();
   if (color_type != nullptr &&
   if (color_type != nullptr &&
@@ -288,6 +312,7 @@ premunge_format_impl(const GeomVertexFormat *orig) {
       (InternalName::get_vertex(), 3, NT_int16,
       (InternalName::get_vertex(), 3, NT_int16,
        C_point, vertex_type->get_start(), vertex_type->get_column_alignment());
        C_point, vertex_type->get_start(), vertex_type->get_column_alignment());
   }
   }
+#endif  // !OPENGLES
 
 
   // Convert packed formats that OpenGL may not understand.
   // Convert packed formats that OpenGL may not understand.
   for (size_t i = 0; i < orig->get_num_columns(); ++i) {
   for (size_t i = 0; i < orig->get_num_columns(); ++i) {
@@ -309,8 +334,25 @@ premunge_format_impl(const GeomVertexFormat *orig) {
                                column->get_contents(), column->get_start(),
                                column->get_contents(), column->get_start(),
                                column->get_column_alignment());
                                column->get_column_alignment());
     }
     }
+#ifdef OPENGLES
+    else if (column->get_numeric_type() == NT_float64) {
+      if (!warned_downgrade_float64.test_and_set()) {
+        GLCAT.warning()
+          << "OpenGL ES does not support 64-bit floats; converting vertex data to 32-bit.\n";
+#ifndef NDEBUG
+        if (vertices_float64) {
+          GLCAT.warning()
+            << "You may want to disable vertices-float64 for better performance.\n";
+        }
+#endif
+      }
+      PT(GeomVertexArrayFormat) array_format = new_format->modify_array(array);
+      array_format->add_column(column->get_name(), column->get_num_components(),
+                               NT_float32, column->get_contents(),
+                               column->get_start(), column->get_column_alignment());
+    }
+#endif
   }
   }
-#endif  // !OPENGLES
 
 
   CPT(GeomVertexFormat) format = GeomVertexFormat::register_format(new_format);
   CPT(GeomVertexFormat) format = GeomVertexFormat::register_format(new_format);
 
 

+ 2 - 2
pandatool/src/deploy-stub/deploy-stub.c

@@ -672,12 +672,12 @@ int main(int argc, char *argv[]) {
   }
   }
 
 
   if (log_filename != NULL) {
   if (log_filename != NULL) {
-    char log_filename_buf[PATH_MAX];
+    char log_filename_buf[4096];
     if (blobinfo.flags & F_log_filename_strftime) {
     if (blobinfo.flags & F_log_filename_strftime) {
       log_filename_buf[0] = 0;
       log_filename_buf[0] = 0;
       time_t now = time(NULL);
       time_t now = time(NULL);
       if (strftime(log_filename_buf, sizeof(log_filename_buf), log_filename, localtime(&now)) > 0) {
       if (strftime(log_filename_buf, sizeof(log_filename_buf), log_filename, localtime(&now)) > 0) {
-        log_filename = &log_filename_buf;
+        log_filename = log_filename_buf;
       }
       }
     }
     }
     setup_logging(log_filename, (blobinfo.flags & F_log_append) != 0);
     setup_logging(log_filename, (blobinfo.flags & F_log_append) != 0);