Browse Source

Merge branch 'release/1.9.x'

rdb 10 years ago
parent
commit
a70878c4ef

+ 6 - 1
README.md

@@ -38,12 +38,17 @@ After acquiring these dependencies, you may simply build Panda3D from the
 command prompt using the following command:
 
 ```bash
-makepanda\makepanda.bat --everything --installer
+makepanda\makepanda.bat --everything --installer --no-eigen
 ```
 
 When the build succeeds, it will produce an .exe file that you can use to
 install Panda3D on your system.
 
+Note: you may choose to remove --no-eigen and build with Eigen support in
+order to improve runtime performance.  However, this will cause the build to
+take hours to complete, as Eigen is a heavily template-based library, and the
+the MSVC compiler does not perform well under these circumstances.
+
 Linux
 -----
 

+ 4 - 13
contrib/src/contribbase/contribsymbols.h

@@ -22,21 +22,12 @@
    C++-style comments, since this file is occasionally included by a C
    file. */
 
-#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_PANDAAI
-  #define EXPCL_PANDAAI __declspec(dllexport)
-  #define EXPTP_PANDAAI
+  #define EXPCL_PANDAAI EXPORT_CLASS
+  #define EXPTP_PANDAAI EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAAI __declspec(dllimport)
-  #define EXPTP_PANDAAI extern
+  #define EXPCL_PANDAAI IMPORT_CLASS
+  #define EXPTP_PANDAAI IMPORT_TEMPL
 #endif
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_PANDAAI
-#define EXPTP_PANDAAI
-
-#endif  /* WIN32_VC */
-
 #endif

+ 4 - 13
direct/src/directbase/directsymbols.h

@@ -17,21 +17,12 @@
 
 /* See dtoolsymbols.h for a rant on the purpose of this file.  */
 
-#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_DIRECT
-  #define EXPCL_DIRECT __declspec(dllexport)
-  #define EXPTP_DIRECT
+  #define EXPCL_DIRECT EXPORT_CLASS
+  #define EXPTP_DIRECT EXPORT_TEMPL
 #else
-  #define EXPCL_DIRECT __declspec(dllimport)
-  #define EXPTP_DIRECT extern
+  #define EXPCL_DIRECT IMPORT_CLASS
+  #define EXPTP_DIRECT IMPORT_TEMPL
 #endif
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_DIRECT
-#define EXPTP_DIRECT
-
-#endif  /* WIN32_VC */
-
 #endif

+ 1 - 1
dtool/PandaVersion.pp

@@ -3,7 +3,7 @@
 // ppremake scripts for Panda.
 
 // Use spaces to separate the major, minor, and sequence numbers here.
-#define PANDA_VERSION 1 9 0
+#define PANDA_VERSION 1 9 1
 
 // This variable will be defined to false in the CVS repository, but
 // scripts that generate source tarballs and/or binary releases for

File diff suppressed because it is too large
+ 466 - 457
dtool/src/cppparser/cppBison.cxx.prebuilt


+ 118 - 114
dtool/src/cppparser/cppBison.h.prebuilt

@@ -91,63 +91,65 @@ extern int cppyydebug;
      KW_BOOL = 300,
      KW_CATCH = 301,
      KW_CHAR = 302,
-     KW_WCHAR_T = 303,
-     KW_CLASS = 304,
-     KW_CONST = 305,
-     KW_DELETE = 306,
-     KW_DOUBLE = 307,
-     KW_DYNAMIC_CAST = 308,
-     KW_ELSE = 309,
-     KW_END_PUBLISH = 310,
-     KW_ENUM = 311,
-     KW_EXTENSION = 312,
-     KW_EXTERN = 313,
-     KW_EXPLICIT = 314,
-     KW_PUBLISHED = 315,
-     KW_FALSE = 316,
-     KW_FLOAT = 317,
-     KW_FRIEND = 318,
-     KW_FOR = 319,
-     KW_GOTO = 320,
-     KW_IF = 321,
-     KW_INLINE = 322,
-     KW_INT = 323,
-     KW_LONG = 324,
-     KW_LONGLONG = 325,
-     KW_MAKE_PROPERTY = 326,
-     KW_MAKE_SEQ = 327,
-     KW_MUTABLE = 328,
-     KW_NAMESPACE = 329,
-     KW_NEW = 330,
-     KW_NOEXCEPT = 331,
-     KW_OPERATOR = 332,
-     KW_PRIVATE = 333,
-     KW_PROTECTED = 334,
-     KW_PUBLIC = 335,
-     KW_REGISTER = 336,
-     KW_RETURN = 337,
-     KW_SHORT = 338,
-     KW_SIGNED = 339,
-     KW_SIZEOF = 340,
-     KW_STATIC = 341,
-     KW_STATIC_CAST = 342,
-     KW_STRUCT = 343,
-     KW_TEMPLATE = 344,
-     KW_THROW = 345,
-     KW_TRUE = 346,
-     KW_TRY = 347,
-     KW_TYPEDEF = 348,
-     KW_TYPENAME = 349,
-     KW_UNION = 350,
-     KW_UNSIGNED = 351,
-     KW_USING = 352,
-     KW_VIRTUAL = 353,
-     KW_VOID = 354,
-     KW_VOLATILE = 355,
-     KW_WHILE = 356,
-     START_CPP = 357,
-     START_CONST_EXPR = 358,
-     START_TYPE = 359
+     KW_CHAR16_T = 303,
+     KW_CHAR32_T = 304,
+     KW_CLASS = 305,
+     KW_CONST = 306,
+     KW_DELETE = 307,
+     KW_DOUBLE = 308,
+     KW_DYNAMIC_CAST = 309,
+     KW_ELSE = 310,
+     KW_END_PUBLISH = 311,
+     KW_ENUM = 312,
+     KW_EXTENSION = 313,
+     KW_EXTERN = 314,
+     KW_EXPLICIT = 315,
+     KW_PUBLISHED = 316,
+     KW_FALSE = 317,
+     KW_FLOAT = 318,
+     KW_FRIEND = 319,
+     KW_FOR = 320,
+     KW_GOTO = 321,
+     KW_IF = 322,
+     KW_INLINE = 323,
+     KW_INT = 324,
+     KW_LONG = 325,
+     KW_LONGLONG = 326,
+     KW_MAKE_PROPERTY = 327,
+     KW_MAKE_SEQ = 328,
+     KW_MUTABLE = 329,
+     KW_NAMESPACE = 330,
+     KW_NEW = 331,
+     KW_NOEXCEPT = 332,
+     KW_OPERATOR = 333,
+     KW_PRIVATE = 334,
+     KW_PROTECTED = 335,
+     KW_PUBLIC = 336,
+     KW_REGISTER = 337,
+     KW_RETURN = 338,
+     KW_SHORT = 339,
+     KW_SIGNED = 340,
+     KW_SIZEOF = 341,
+     KW_STATIC = 342,
+     KW_STATIC_CAST = 343,
+     KW_STRUCT = 344,
+     KW_TEMPLATE = 345,
+     KW_THROW = 346,
+     KW_TRUE = 347,
+     KW_TRY = 348,
+     KW_TYPEDEF = 349,
+     KW_TYPENAME = 350,
+     KW_UNION = 351,
+     KW_UNSIGNED = 352,
+     KW_USING = 353,
+     KW_VIRTUAL = 354,
+     KW_VOID = 355,
+     KW_VOLATILE = 356,
+     KW_WCHAR_T = 357,
+     KW_WHILE = 358,
+     START_CPP = 359,
+     START_CONST_EXPR = 360,
+     START_TYPE = 361
    };
 #endif
 /* Tokens.  */
@@ -196,63 +198,65 @@ extern int cppyydebug;
 #define KW_BOOL 300
 #define KW_CATCH 301
 #define KW_CHAR 302
-#define KW_WCHAR_T 303
-#define KW_CLASS 304
-#define KW_CONST 305
-#define KW_DELETE 306
-#define KW_DOUBLE 307
-#define KW_DYNAMIC_CAST 308
-#define KW_ELSE 309
-#define KW_END_PUBLISH 310
-#define KW_ENUM 311
-#define KW_EXTENSION 312
-#define KW_EXTERN 313
-#define KW_EXPLICIT 314
-#define KW_PUBLISHED 315
-#define KW_FALSE 316
-#define KW_FLOAT 317
-#define KW_FRIEND 318
-#define KW_FOR 319
-#define KW_GOTO 320
-#define KW_IF 321
-#define KW_INLINE 322
-#define KW_INT 323
-#define KW_LONG 324
-#define KW_LONGLONG 325
-#define KW_MAKE_PROPERTY 326
-#define KW_MAKE_SEQ 327
-#define KW_MUTABLE 328
-#define KW_NAMESPACE 329
-#define KW_NEW 330
-#define KW_NOEXCEPT 331
-#define KW_OPERATOR 332
-#define KW_PRIVATE 333
-#define KW_PROTECTED 334
-#define KW_PUBLIC 335
-#define KW_REGISTER 336
-#define KW_RETURN 337
-#define KW_SHORT 338
-#define KW_SIGNED 339
-#define KW_SIZEOF 340
-#define KW_STATIC 341
-#define KW_STATIC_CAST 342
-#define KW_STRUCT 343
-#define KW_TEMPLATE 344
-#define KW_THROW 345
-#define KW_TRUE 346
-#define KW_TRY 347
-#define KW_TYPEDEF 348
-#define KW_TYPENAME 349
-#define KW_UNION 350
-#define KW_UNSIGNED 351
-#define KW_USING 352
-#define KW_VIRTUAL 353
-#define KW_VOID 354
-#define KW_VOLATILE 355
-#define KW_WHILE 356
-#define START_CPP 357
-#define START_CONST_EXPR 358
-#define START_TYPE 359
+#define KW_CHAR16_T 303
+#define KW_CHAR32_T 304
+#define KW_CLASS 305
+#define KW_CONST 306
+#define KW_DELETE 307
+#define KW_DOUBLE 308
+#define KW_DYNAMIC_CAST 309
+#define KW_ELSE 310
+#define KW_END_PUBLISH 311
+#define KW_ENUM 312
+#define KW_EXTENSION 313
+#define KW_EXTERN 314
+#define KW_EXPLICIT 315
+#define KW_PUBLISHED 316
+#define KW_FALSE 317
+#define KW_FLOAT 318
+#define KW_FRIEND 319
+#define KW_FOR 320
+#define KW_GOTO 321
+#define KW_IF 322
+#define KW_INLINE 323
+#define KW_INT 324
+#define KW_LONG 325
+#define KW_LONGLONG 326
+#define KW_MAKE_PROPERTY 327
+#define KW_MAKE_SEQ 328
+#define KW_MUTABLE 329
+#define KW_NAMESPACE 330
+#define KW_NEW 331
+#define KW_NOEXCEPT 332
+#define KW_OPERATOR 333
+#define KW_PRIVATE 334
+#define KW_PROTECTED 335
+#define KW_PUBLIC 336
+#define KW_REGISTER 337
+#define KW_RETURN 338
+#define KW_SHORT 339
+#define KW_SIGNED 340
+#define KW_SIZEOF 341
+#define KW_STATIC 342
+#define KW_STATIC_CAST 343
+#define KW_STRUCT 344
+#define KW_TEMPLATE 345
+#define KW_THROW 346
+#define KW_TRUE 347
+#define KW_TRY 348
+#define KW_TYPEDEF 349
+#define KW_TYPENAME 350
+#define KW_UNION 351
+#define KW_UNSIGNED 352
+#define KW_USING 353
+#define KW_VIRTUAL 354
+#define KW_VOID 355
+#define KW_VOLATILE 356
+#define KW_WCHAR_T 357
+#define KW_WHILE 358
+#define START_CPP 359
+#define START_CONST_EXPR 360
+#define START_TYPE 361
 
 
 

+ 13 - 0
dtool/src/dtoolbase/dtoolbase.h

@@ -427,6 +427,19 @@
 #define EXTEND
 #endif
 
+/* These symbols are used in dtoolsymbols.h and pandasymbols.h. */
+#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
+#define EXPORT_CLASS __declspec(dllexport)
+#define EXPORT_TEMPL
+#define IMPORT_CLASS __declspec(dllimport)
+#define IMPORT_TEMPL extern
+#else
+#define EXPORT_CLASS
+#define EXPORT_TEMPL
+#define IMPORT_CLASS
+#define IMPORT_TEMPL extern
+#endif
+
 #ifdef __cplusplus
 #include "dtoolbase_cc.h"
 #endif

+ 1 - 1
dtool/src/dtoolbase/dtoolbase_cc.h

@@ -174,7 +174,7 @@ typedef ios::seekdir ios_seekdir;
 #  define MOVE(x) x
 #endif
 
-#if defined(WIN32_VC) && !defined(LINK_ALL_STATIC) && defined(EXPORT_TEMPLATES)
+#if !defined(LINK_ALL_STATIC) && defined(EXPORT_TEMPLATES)
 // This macro must be used to export an instantiated template class
 // from a DLL.  If the template class name itself contains commas, it
 // may be necessary to first define a macro for the class name, to

+ 12 - 27
dtool/src/dtoolbase/dtoolsymbols.h

@@ -70,45 +70,30 @@
 
 #define EXPCL_EMPTY
 
-#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_DTOOL
-  #define EXPCL_DTOOL __declspec(dllexport)
-  #define EXPTP_DTOOL
+  #define EXPCL_DTOOL EXPORT_CLASS
+  #define EXPTP_DTOOL EXPORT_TEMPL
 #else
-  #define EXPCL_DTOOL __declspec(dllimport)
-  #define EXPTP_DTOOL extern
+  #define EXPCL_DTOOL IMPORT_CLASS
+  #define EXPTP_DTOOL IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_DTOOLCONFIG
-  #define EXPCL_DTOOLCONFIG __declspec(dllexport)
-  #define EXPTP_DTOOLCONFIG
+  #define EXPCL_DTOOLCONFIG EXPORT_CLASS
+  #define EXPTP_DTOOLCONFIG EXPORT_TEMPL
 #else
-  #define EXPCL_DTOOLCONFIG __declspec(dllimport)
-  #define EXPTP_DTOOLCONFIG extern
+  #define EXPCL_DTOOLCONFIG IMPORT_CLASS
+  #define EXPTP_DTOOLCONFIG IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_MISC
-  #define EXPCL_MISC __declspec(dllexport)
-  #define EXPTP_MISC
+  #define EXPCL_MISC EXPORT_CLASS
+  #define EXPTP_MISC EXPORT_TEMPL
 #else /* BUILDING_MISC */
-  #define EXPCL_MISC __declspec(dllimport)
-  #define EXPTP_MISC extern
+  #define EXPCL_MISC IMPORT_CLASS
+  #define EXPTP_MISC IMPORT_TEMPL
 #endif /* BUILDING_MISC */
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_DTOOL
-#define EXPTP_DTOOL
-
-#define EXPCL_DTOOLCONFIG
-#define EXPTP_DTOOLCONFIG
-
-#define EXPCL_MISC
-#define EXPTP_MISC
-
-#endif  /* WIN32_VC */
-
 /* These two are always defined empty, because pystub is statically
    built.  But we leave the symbol around in case we change our minds
    to make pystub once again be a dynamic library. */

+ 1 - 1
dtool/src/dtoolbase/epvector.h

@@ -17,7 +17,7 @@
 
 #include "pvector.h"
 
-#if defined(HAVE_EIGEN) && defined(_WIN32) && !defined(CPPPARSER)
+#if defined(HAVE_EIGEN) && defined(_WIN32) && !defined(_WIN64) && !defined(CPPPARSER)
 
 #include <Eigen/StdVector>
 

+ 16 - 6
makepanda/makepanda.py

@@ -913,9 +913,19 @@ if (COMPILER=="GCC"):
 
 DefSymbol("WITHINPANDA", "WITHIN_PANDA", "1")
 if GetLinkAllStatic():
-    DefSymbol("ALWAYS", "LINK_ALL_STATIC", "")
+    DefSymbol("ALWAYS", "LINK_ALL_STATIC")
 if GetTarget() == 'android':
-    DefSymbol("ALWAYS", "ANDROID", "")
+    DefSymbol("ALWAYS", "ANDROID")
+
+if not PkgSkip("EIGEN"):
+    DefSymbol("ALWAYS", "EIGEN_MPL2_ONLY")
+    if GetOptimize() >= 3:
+        DefSymbol("ALWAYS", "EIGEN_NO_DEBUG")
+        if COMPILER == "MSVC":
+            # Squeeze out a bit more performance on MSVC builds...
+            # Only do this if EIGEN_NO_DEBUG is also set, otherwise it
+            # will turn them into runtime assertions.
+            DefSymbol("ALWAYS", "EIGEN_NO_STATIC_ASSERT")
 
 ########################################################################
 ##
@@ -1018,10 +1028,10 @@ def CompileCxx(obj,src,opts):
 
             if (optlevel==1): cmd += " /MDd /Zi /RTCs /GS"
             if (optlevel==2): cmd += " /MDd /Zi"
-            if (optlevel==3): cmd += " /MD /Zi /O2 /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING"
+            if (optlevel==3): cmd += " /MD /Zi /GS- /O2 /Ob2 /Oi /Ot /fp:fast"
             if (optlevel==4):
-               cmd += " /MD /Zi /Ox /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING /DNDEBUG /GL"
-               cmd += " /Oy /Zp16"      # jean-claude add /Zp16 insures correct static alignment for SSEx
+                cmd += " /MD /Zi /GS- /Ox /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING /DNDEBUG /GL"
+                cmd += " /Oy /Zp16"      # jean-claude add /Zp16 insures correct static alignment for SSEx
 
             cmd += " /Fd" + os.path.splitext(obj)[0] + ".pdb"
 
@@ -1036,7 +1046,7 @@ def CompileCxx(obj,src,opts):
             if 'EXCEPTIONS' in opts:
                 cmd += " /EHsc"
             else:
-                cmd += " -D_HAS_EXCEPTIONS=0"
+                cmd += " /D_HAS_EXCEPTIONS=0"
 
             if 'RTTI' not in opts:
                  cmd += " /GR-"

+ 0 - 2
panda/src/chan/animChannelMatrixFixed.h

@@ -20,8 +20,6 @@
 #include "animChannel.h"
 #include "luse.h"
 
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_CHAN, EXPTP_PANDA_CHAN, AnimChannel<ACMatrixSwitchType>);
-
 ////////////////////////////////////////////////////////////////////
 //       Class : AnimChannelMatrixFixed
 // Description : A specialization on AnimChannel to add all the

+ 2 - 0
panda/src/display/displayRegion.h

@@ -360,6 +360,8 @@ private:
   static TypeHandle _type_handle;
 };
 
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_DISPLAY, EXPTP_PANDA_DISPLAY, epvector<DisplayRegion::Region>);
+
 #include "displayRegion.I"
 
 #endif /* DISPLAYREGION_H */

+ 3 - 0
panda/src/egg/eggMorphList.h

@@ -65,6 +65,9 @@ private:
   Morphs _morphs;
 };
 
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, EggMorphList<EggMorph<LVector3d> >);
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, EggMorphList<EggMorph<LVector4> >);
+
 typedef EggMorphList<EggMorphVertex> EggMorphVertexList;
 typedef EggMorphList<EggMorphNormal> EggMorphNormalList;
 typedef EggMorphList<EggMorphTexCoord> EggMorphTexCoordList;

+ 4 - 0
panda/src/express/pta_uchar.h

@@ -29,10 +29,14 @@
 //               rather than defining the pta again.
 ////////////////////////////////////////////////////////////////////
 
+#if !defined(__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
+// GCC 4.6 has a weird bug related to this type.
+#else
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, PointerToBase<ReferenceCountedVector<uchar> >)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, PointerToArrayBase<uchar>)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, PointerToArray<unsigned char>)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, ConstPointerToArray<unsigned char>)
+#endif
 
 typedef PointerToArray<unsigned char> PTA_uchar;
 typedef ConstPointerToArray<unsigned char> CPTA_uchar;

+ 2 - 0
panda/src/gobj/shader.h

@@ -607,6 +607,8 @@ private:
   static TypeHandle _type_handle;
 };
 
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_GOBJ, EXPTP_PANDA_GOBJ, epvector<Shader::ShaderMatSpec>);
+
 #include "shader.I"
 
 #endif

+ 12 - 6
panda/src/gobj/texture.cxx

@@ -2892,6 +2892,8 @@ do_read_one(CData *cdata, const Filename &fullpath, const Filename &alpha_fullpa
   }
   image.copy_header_from(*image_reader);
 
+  AutoTextureScale auto_texture_scale = do_get_auto_texture_scale(cdata);
+
   // If it's a floating-point image file, read it by default into a
   // floating-point texture.
   bool read_floating_point;
@@ -2929,9 +2931,7 @@ do_read_one(CData *cdata, const Filename &fullpath, const Filename &alpha_fullpa
       y_size = 1;
 
     } else {
-      consider_rescale(image, fullpath.get_basename(), do_get_auto_texture_scale(cdata));
-      x_size = image.get_read_x_size();
-      y_size = image.get_read_y_size();
+      adjust_size(x_size, y_size, fullpath.get_basename(), false, auto_texture_scale);
     }
 
     if (read_floating_point) {
@@ -2949,9 +2949,15 @@ do_read_one(CData *cdata, const Filename &fullpath, const Filename &alpha_fullpa
 
   } else {
     if (z == 0 && n == 0) {
-      cdata->_orig_file_x_size = image.get_x_size();
-      cdata->_orig_file_y_size = image.get_y_size();
-      consider_rescale(image, fullpath.get_basename(), do_get_auto_texture_scale(cdata));
+      int x_size = image.get_x_size();
+      int y_size = image.get_y_size();
+
+      cdata->_orig_file_x_size = x_size;
+      cdata->_orig_file_y_size = y_size;
+
+      if (adjust_size(x_size, y_size, fullpath.get_basename(), false, auto_texture_scale)) {
+        image.set_read_size(x_size, y_size);
+      }
     } else {
       image.set_read_size(do_get_expected_mipmap_x_size(cdata, n),
                           do_get_expected_mipmap_y_size(cdata, n));

+ 0 - 27
panda/src/linmath/vector_LPoint2f.cxx

@@ -1,27 +0,0 @@
-// Filename: vector_LPoint2f.cxx
-// Created by:  drose (10May00)
-//
-////////////////////////////////////////////////////////////////////
-//
-// PANDA 3D SOFTWARE
-// Copyright (c) Carnegie Mellon University.  All rights reserved.
-//
-// All use of this software is subject to the terms of the revised BSD
-// license.  You should have received a copy of this license along
-// with this source code in a file named "LICENSE."
-//
-////////////////////////////////////////////////////////////////////
-
-#include "vector_LPoint2f.h"
-
-#define EXPCL EXPCL_PANDA_LINMATH
-#define EXPTP EXPTP_PANDA_LINMATH
-#define TYPE LPoint2f
-#define NAME vector_LPoint2f
-
-#include "vector_src.cxx"
-
-// Tell GCC that we'll take care of the instantiation explicitly here.
-#ifdef __GNUC__
-#pragma implementation
-#endif

+ 0 - 43
panda/src/linmath/vector_LPoint2f.h

@@ -1,43 +0,0 @@
-// Filename: vector_LPoint2f.h
-// Created by:  drose (10May00)
-//
-////////////////////////////////////////////////////////////////////
-//
-// PANDA 3D SOFTWARE
-// Copyright (c) Carnegie Mellon University.  All rights reserved.
-//
-// All use of this software is subject to the terms of the revised BSD
-// license.  You should have received a copy of this license along
-// with this source code in a file named "LICENSE."
-//
-////////////////////////////////////////////////////////////////////
-
-#ifndef VECTOR_LPOINT2F_H
-#define VECTOR_LPOINT2F_H
-
-#include "pandabase.h"
-#include "luse.h"
-#include "pvector.h"
-
-////////////////////////////////////////////////////////////////////
-//       Class : vector_LPoint2f
-// Description : A vector of LPoint2fs.  This class is defined once here,
-//               and exported to PANDA.DLL; other packages that want
-//               to use a vector of this type (whether they need to
-//               export it or not) should include this header file,
-//               rather than defining the vector again.
-////////////////////////////////////////////////////////////////////
-
-#define EXPCL EXPCL_PANDA_LINMATH
-#define EXPTP EXPTP_PANDA_LINMATH
-#define TYPE LPoint2f
-#define NAME vector_LPoint2f
-
-#include "vector_src.h"
-
-// Tell GCC that we'll take care of the instantiation explicitly here.
-#ifdef __GNUC__
-#pragma interface
-#endif
-
-#endif

+ 128 - 233
panda/src/pandabase/pandasymbols.h

@@ -22,367 +22,262 @@
    C++-style comments, since this file is occasionally included by a C
    file. */
 
-#if (defined(WIN32_VC) || defined(WIN64_VC)) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_CFTALK
-  #define EXPCL_CFTALK __declspec(dllexport)
-  #define EXPTP_CFTALK
+  #define EXPCL_CFTALK EXPORT_CLASS
+  #define EXPTP_CFTALK EXPORT_TEMPL
 #else
-  #define EXPCL_CFTALK __declspec(dllimport)
-  #define EXPTP_CFTALK extern
+  #define EXPCL_CFTALK IMPORT_CLASS
+  #define EXPTP_CFTALK IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_COLLADA
-  #define EXPCL_COLLADA __declspec(dllexport)
-  #define EXPTP_COLLADA
+  #define EXPCL_COLLADA EXPORT_CLASS
+  #define EXPTP_COLLADA EXPORT_TEMPL
 #else
-  #define EXPCL_COLLADA __declspec(dllimport)
-  #define EXPTP_COLLADA extern
+  #define EXPCL_COLLADA IMPORT_CLASS
+  #define EXPTP_COLLADA IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_FFMPEG
-  #define EXPCL_FFMPEG __declspec(dllexport)
-  #define EXPTP_FFMPEG
+  #define EXPCL_FFMPEG EXPORT_CLASS
+  #define EXPTP_FFMPEG EXPORT_TEMPL
 #else
-  #define EXPCL_FFMPEG __declspec(dllimport)
-  #define EXPTP_FFMPEG extern
+  #define EXPCL_FFMPEG IMPORT_CLASS
+  #define EXPTP_FFMPEG IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_FRAMEWORK
-  #define EXPCL_FRAMEWORK __declspec(dllexport)
-  #define EXPTP_FRAMEWORK
+  #define EXPCL_FRAMEWORK EXPORT_CLASS
+  #define EXPTP_FRAMEWORK EXPORT_TEMPL
 #else
-  #define EXPCL_FRAMEWORK __declspec(dllimport)
-  #define EXPTP_FRAMEWORK extern
+  #define EXPCL_FRAMEWORK IMPORT_CLASS
+  #define EXPTP_FRAMEWORK IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_LINUX_AUDIO
-  #define EXPCL_LINUX_AUDIO __declspec(dllexport)
-  #define EXPTP_LINUX_AUDIO
+  #define EXPCL_LINUX_AUDIO EXPORT_CLASS
+  #define EXPTP_LINUX_AUDIO EXPORT_TEMPL
 #else
-  #define EXPCL_LINUX_AUDIO __declspec(dllimport)
-  #define EXPTP_LINUX_AUDIO extern
+  #define EXPCL_LINUX_AUDIO IMPORT_CLASS
+  #define EXPTP_LINUX_AUDIO IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_MILES_AUDIO
-  #define EXPCL_MILES_AUDIO __declspec(dllexport)
-  #define EXPTP_MILES_AUDIO
+  #define EXPCL_MILES_AUDIO EXPORT_CLASS
+  #define EXPTP_MILES_AUDIO EXPORT_TEMPL
 #else
-  #define EXPCL_MILES_AUDIO __declspec(dllimport)
-  #define EXPTP_MILES_AUDIO extern
+  #define EXPCL_MILES_AUDIO IMPORT_CLASS
+  #define EXPTP_MILES_AUDIO IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_FMOD_AUDIO
-  #define EXPCL_FMOD_AUDIO __declspec(dllexport)
-  #define EXPTP_FMOD_AUDIO
+  #define EXPCL_FMOD_AUDIO EXPORT_CLASS
+  #define EXPTP_FMOD_AUDIO EXPORT_TEMPL
 #else
-  #define EXPCL_FMOD_AUDIO __declspec(dllimport)
-  #define EXPTP_FMOD_AUDIO extern
+  #define EXPCL_FMOD_AUDIO IMPORT_CLASS
+  #define EXPTP_FMOD_AUDIO IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_OCULUSVR
-  #define EXPCL_OCULUSVR __declspec(dllexport)
-  #define EXPTP_OCULUSVR
+  #define EXPCL_OCULUSVR EXPORT_CLASS
+  #define EXPTP_OCULUSVR EXPORT_TEMPL
 #else
-  #define EXPCL_OCULUSVR __declspec(dllimport)
-  #define EXPTP_OCULUSVR extern
+  #define EXPCL_OCULUSVR IMPORT_CLASS
+  #define EXPTP_OCULUSVR IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_OPENAL_AUDIO
-  #define EXPCL_OPENAL_AUDIO __declspec(dllexport)
-  #define EXPTP_OPENAL_AUDIO
+  #define EXPCL_OPENAL_AUDIO EXPORT_CLASS
+  #define EXPTP_OPENAL_AUDIO EXPORT_TEMPL
 #else
-  #define EXPCL_OPENAL_AUDIO __declspec(dllimport)
-  #define EXPTP_OPENAL_AUDIO extern
+  #define EXPCL_OPENAL_AUDIO IMPORT_CLASS
+  #define EXPTP_OPENAL_AUDIO IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDA
-  #define EXPCL_PANDA __declspec(dllexport)
-  #define EXPTP_PANDA
+  #define EXPCL_PANDA EXPORT_CLASS
+  #define EXPTP_PANDA EXPORT_TEMPL
 #else
-  #define EXPCL_PANDA __declspec(dllimport)
-  #define EXPTP_PANDA extern
+  #define EXPCL_PANDA IMPORT_CLASS
+  #define EXPTP_PANDA IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAAWESOMIUM
-  #define EXPCL_PANDAAWESOMIUM __declspec(dllexport)
-  #define EXPTP_PANDAAWESOMIUM
+  #define EXPCL_PANDAAWESOMIUM EXPORT_CLASS
+  #define EXPTP_PANDAAWESOMIUM EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAAWESOMIUM __declspec(dllimport)
-  #define EXPTP_PANDAAWESOMIUM extern
+  #define EXPCL_PANDAAWESOMIUM IMPORT_CLASS
+  #define EXPTP_PANDAAWESOMIUM IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDABULLET
-  #define EXPCL_PANDABULLET __declspec(dllexport)
-  #define EXPTP_PANDABULLET
+  #define EXPCL_PANDABULLET EXPORT_CLASS
+  #define EXPTP_PANDABULLET EXPORT_TEMPL
 #else
-  #define EXPCL_PANDABULLET __declspec(dllimport)
-  #define EXPTP_PANDABULLET extern
+  #define EXPCL_PANDABULLET IMPORT_CLASS
+  #define EXPTP_PANDABULLET IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDACR
-  #define EXPCL_PANDACR __declspec(dllexport)
-  #define EXPTP_PANDACR
+  #define EXPCL_PANDACR EXPORT_CLASS
+  #define EXPTP_PANDACR EXPORT_TEMPL
 #else
-  #define EXPCL_PANDACR __declspec(dllimport)
-  #define EXPTP_PANDACR extern
+  #define EXPCL_PANDACR IMPORT_CLASS
+  #define EXPTP_PANDACR IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDADX
-  #define EXPCL_PANDADX __declspec(dllexport)
-  #define EXPTP_PANDADX
+  #define EXPCL_PANDADX EXPORT_CLASS
+  #define EXPTP_PANDADX EXPORT_TEMPL
 #else
-  #define EXPCL_PANDADX __declspec(dllimport)
-  #define EXPTP_PANDADX extern
+  #define EXPCL_PANDADX IMPORT_CLASS
+  #define EXPTP_PANDADX IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAEGG
-  #define EXPCL_PANDAEGG __declspec(dllexport)
-  #define EXPTP_PANDAEGG
+  #define EXPCL_PANDAEGG EXPORT_CLASS
+  #define EXPTP_PANDAEGG EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAEGG __declspec(dllimport)
-  #define EXPTP_PANDAEGG extern
+  #define EXPCL_PANDAEGG IMPORT_CLASS
+  #define EXPTP_PANDAEGG IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAEXPRESS
-  #define EXPCL_PANDAEXPRESS __declspec(dllexport)
-  #define EXPTP_PANDAEXPRESS
+  #define EXPCL_PANDAEXPRESS EXPORT_CLASS
+  #define EXPTP_PANDAEXPRESS EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAEXPRESS __declspec(dllimport)
-  #define EXPTP_PANDAEXPRESS extern
+  #define EXPCL_PANDAEXPRESS IMPORT_CLASS
+  #define EXPTP_PANDAEXPRESS IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAFX
-  #define EXPCL_PANDAFX __declspec(dllexport)
-  #define EXPTP_PANDAFX
+  #define EXPCL_PANDAFX EXPORT_CLASS
+  #define EXPTP_PANDAFX EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAFX __declspec(dllimport)
-  #define EXPTP_PANDAFX extern
+  #define EXPCL_PANDAFX IMPORT_CLASS
+  #define EXPTP_PANDAFX IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAGL
-  #define EXPCL_PANDAGL __declspec(dllexport)
-  #define EXPTP_PANDAGL
+  #define EXPCL_PANDAGL EXPORT_CLASS
+  #define EXPTP_PANDAGL EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAGL __declspec(dllimport)
-  #define EXPTP_PANDAGL extern
+  #define EXPCL_PANDAGL IMPORT_CLASS
+  #define EXPTP_PANDAGL IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAGLES
-  #define EXPCL_PANDAGLES __declspec(dllexport)
-  #define EXPTP_PANDAGLES
+  #define EXPCL_PANDAGLES EXPORT_CLASS
+  #define EXPTP_PANDAGLES EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAGLES __declspec(dllimport)
-  #define EXPTP_PANDAGLES extern
+  #define EXPCL_PANDAGLES IMPORT_CLASS
+  #define EXPTP_PANDAGLES IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAGLES2
-  #define EXPCL_PANDAGLES2 __declspec(dllexport)
-  #define EXPTP_PANDAGLES2
+  #define EXPCL_PANDAGLES2 EXPORT_CLASS
+  #define EXPTP_PANDAGLES2 EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAGLES2 __declspec(dllimport)
-  #define EXPTP_PANDAGLES2 extern
+  #define EXPCL_PANDAGLES2 IMPORT_CLASS
+  #define EXPTP_PANDAGLES2 IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAODE
-  #define EXPCL_PANDAODE __declspec(dllexport)
-  #define EXPTP_PANDAODE
+  #define EXPCL_PANDAODE EXPORT_CLASS
+  #define EXPTP_PANDAODE EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAODE __declspec(dllimport)
-  #define EXPTP_PANDAODE extern
+  #define EXPCL_PANDAODE IMPORT_CLASS
+  #define EXPTP_PANDAODE IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAPHYSICS
-  #define EXPCL_PANDAPHYSICS __declspec(dllexport)
-  #define EXPTP_PANDAPHYSICS
+  #define EXPCL_PANDAPHYSICS EXPORT_CLASS
+  #define EXPTP_PANDAPHYSICS EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAPHYSICS __declspec(dllimport)
-  #define EXPTP_PANDAPHYSICS extern
+  #define EXPCL_PANDAPHYSICS IMPORT_CLASS
+  #define EXPTP_PANDAPHYSICS IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAPHYSX
-  #define EXPCL_PANDAPHYSX __declspec(dllexport)
-  #define EXPTP_PANDAPHYSX
+  #define EXPCL_PANDAPHYSX EXPORT_CLASS
+  #define EXPTP_PANDAPHYSX EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAPHYSX __declspec(dllimport)
-  #define EXPTP_PANDAPHYSX extern
+  #define EXPCL_PANDAPHYSX IMPORT_CLASS
+  #define EXPTP_PANDAPHYSX IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDASPEEDTREE
-  #define EXPCL_PANDASPEEDTREE __declspec(dllexport)
-  #define EXPTP_PANDASPEEDTREE
+  #define EXPCL_PANDASPEEDTREE EXPORT_CLASS
+  #define EXPTP_PANDASPEEDTREE EXPORT_TEMPL
 #else
-  #define EXPCL_PANDASPEEDTREE __declspec(dllimport)
-  #define EXPTP_PANDASPEEDTREE extern
+  #define EXPCL_PANDASPEEDTREE IMPORT_CLASS
+  #define EXPTP_PANDASPEEDTREE IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDASKEL
-  #define EXPCL_PANDASKEL __declspec(dllexport)
-  #define EXPTP_PANDASKEL
+  #define EXPCL_PANDASKEL EXPORT_CLASS
+  #define EXPTP_PANDASKEL EXPORT_TEMPL
 #else
-  #define EXPCL_PANDASKEL __declspec(dllimport)
-  #define EXPTP_PANDASKEL extern
+  #define EXPCL_PANDASKEL IMPORT_CLASS
+  #define EXPTP_PANDASKEL IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAWIN
-  #define EXPCL_PANDAWIN __declspec(dllexport)
-  #define EXPTP_PANDAWIN
+  #define EXPCL_PANDAWIN EXPORT_CLASS
+  #define EXPTP_PANDAWIN EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAWIN __declspec(dllimport)
-  #define EXPTP_PANDAWIN extern
+  #define EXPCL_PANDAWIN IMPORT_CLASS
+  #define EXPTP_PANDAWIN IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PANDAX11
-  #define EXPCL_PANDAX11 __declspec(dllexport)
-  #define EXPTP_PANDAX11
+  #define EXPCL_PANDAX11 EXPORT_CLASS
+  #define EXPTP_PANDAX11 EXPORT_TEMPL
 #else
-  #define EXPCL_PANDAX11 __declspec(dllimport)
-  #define EXPTP_PANDAX11 extern
+  #define EXPCL_PANDAX11 IMPORT_CLASS
+  #define EXPTP_PANDAX11 IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_ROCKET
-  #define EXPCL_ROCKET __declspec(dllexport)
-  #define EXPTP_ROCKET
+  #define EXPCL_ROCKET EXPORT_CLASS
+  #define EXPTP_ROCKET EXPORT_TEMPL
 #else
-  #define EXPCL_ROCKET __declspec(dllimport)
-  #define EXPTP_ROCKET extern
+  #define EXPCL_ROCKET IMPORT_CLASS
+  #define EXPTP_ROCKET IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_SHADER
-  #define EXPCL_SHADER __declspec(dllexport)
-  #define EXPTP_SHADER
+  #define EXPCL_SHADER EXPORT_CLASS
+  #define EXPTP_SHADER EXPORT_TEMPL
 #else
-  #define EXPCL_SHADER __declspec(dllimport)
-  #define EXPTP_SHADER extern
+  #define EXPCL_SHADER IMPORT_CLASS
+  #define EXPTP_SHADER IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_TINYDISPLAY
-  #define EXPCL_TINYDISPLAY __declspec(dllexport)
-  #define EXPTP_TINYDISPLAY
+  #define EXPCL_TINYDISPLAY EXPORT_CLASS
+  #define EXPTP_TINYDISPLAY EXPORT_TEMPL
 #else
-  #define EXPCL_TINYDISPLAY __declspec(dllimport)
-  #define EXPTP_TINYDISPLAY extern
+  #define EXPCL_TINYDISPLAY IMPORT_CLASS
+  #define EXPTP_TINYDISPLAY IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_VISION
-  #define EXPCL_VISION __declspec(dllexport)
-  #define EXPTP_VISION
+  #define EXPCL_VISION EXPORT_CLASS
+  #define EXPTP_VISION EXPORT_TEMPL
 #else
-  #define EXPCL_VISION __declspec(dllimport)
-  #define EXPTP_VISION extern
+  #define EXPCL_VISION IMPORT_CLASS
+  #define EXPTP_VISION IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_VRPN
-  #define EXPCL_VRPN __declspec(dllexport)
-  #define EXPTP_VRPN
+  #define EXPCL_VRPN EXPORT_CLASS
+  #define EXPTP_VRPN EXPORT_TEMPL
 #else
-  #define EXPCL_VRPN __declspec(dllimport)
-  #define EXPTP_VRPN extern
+  #define EXPCL_VRPN IMPORT_CLASS
+  #define EXPTP_VRPN IMPORT_TEMPL
 #endif
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_CFTALK
-#define EXPTP_CFTALK
-
-#define EXPCL_COLLADA
-#define EXPTP_COLLADA
-
-#define EXPCL_FFMPEG
-#define EXPTP_FFMPEG
-
-#define EXPCL_FRAMEWORK
-#define EXPTP_FRAMEWORK
-
-#define EXPCL_LINUX_AUDIO
-#define EXPTP_LINUX_AUDIO
-
-#define EXPCL_MILES_AUDIO
-#define EXPTP_MILES_AUDIO
-
-#define EXPCL_FMOD_AUDIO
-#define EXPTP_FMOD_AUDIO
-
-#define EXPCL_OCULUSVR
-#define EXPTP_OCULUSVR
-
-#define EXPCL_OPENAL_AUDIO
-#define EXPTP_OPENAL_AUDIO
-
-#define EXPCL_PANDA
-#define EXPTP_PANDA
-
-#define EXPCL_PANDAAWESOMIUM
-#define EXPTP_PANDAAWESOMIUM
-
-#define EXPCL_PANDABULLET
-#define EXPTP_PANDABULLET
-
-#define EXPCL_PANDACR
-#define EXPTP_PANDACR
-
-#define EXPCL_PANDADX
-#define EXPTP_PANDADX
-
-#define EXPCL_PANDAEGG
-#define EXPTP_PANDAEGG
-
-#define EXPCL_PANDAEXPRESS
-#define EXPTP_PANDAEXPRESS
-
-#define EXPCL_PANDAFX
-#define EXPTP_PANDAFX
-
-#define EXPCL_PANDAGL
-#define EXPTP_PANDAGL
-
-#define EXPCL_PANDAGLES
-#define EXPTP_PANDAGLES
-
-#define EXPCL_PANDAGLES2
-#define EXPTP_PANDAGLES2
-
-#define EXPCL_PANDAODE
-#define EXPTP_PANDAODE
-
-#define EXPCL_PANDAPHYSICS
-#define EXPTP_PANDAPHYSICS
-
-#define EXPCL_PANDAPHYSX
-#define EXPTP_PANDAPHYSX
-
-#define EXPCL_PANDASPEEDTREE
-#define EXPTP_PANDASPEEDTREE
-
-#define EXPCL_PANDARIB
-#define EXPTP_PANDARIB
-
-#define EXPCL_PANDASKEL
-#define EXPTP_PANDASKEL
-
-#define EXPCL_PANDAWIN
-#define EXPTP_PANDAWIN
-
-#define EXPCL_PANDAX11
-#define EXPTP_PANDAX11
-
-#define EXPCL_ROCKET
-#define EXPTP_ROCKET
-
-#define EXPCL_SHADER
-#define EXPTP_SHADER
-
-#define EXPCL_TINYDISPLAY
-#define EXPTP_TINYDISPLAY
-
-#define EXPCL_VISION
-#define EXPTP_VISION
-
-#define EXPCL_VRPN
-#define EXPTP_VRPN
-
-#endif  /* WIN32_VC */
-
 #if (defined(WIN32_VC) || defined(WIN64_VC)) && !defined(CPPPARSER)
 #define INLINE_LINMATH __forceinline
 #define INLINE_MATHUTIL __forceinline

+ 2 - 3
panda/src/pnmimage/convert_srgb.cxx

@@ -15,7 +15,7 @@
 #include "convert_srgb.h"
 
 // Lookup tables for converting from unsigned char formats.
-ALIGN_64BYTE const
+const
 unsigned char to_srgb8_table[256] = { 0x00, 0x0d, 0x16, 0x1c, 0x22, 0x26, 0x2a,
   0x2e, 0x32, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x42, 0x45, 0x47, 0x49, 0x4b, 0x4d,
   0x4f, 0x51, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5d, 0x5f, 0x60, 0x62, 0x63,
@@ -38,7 +38,7 @@ unsigned char to_srgb8_table[256] = { 0x00, 0x0d, 0x16, 0x1c, 0x22, 0x26, 0x2a,
   0xf9, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe,
   0xff, 0xff};
 
-ALIGN_64BYTE const
+const
 unsigned char to_linear_uchar_table[256] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
   0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04,
@@ -61,7 +61,6 @@ unsigned char to_linear_uchar_table[256] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
   0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa,
   0xfd, 0xff};
 
-ALIGN_64BYTE
 const float to_linear_float_table[256] = { 0, 0.000304f, 0.000607f, 0.000911f,
   0.001214f, 0.001518f, 0.001821f, 0.002125f, 0.002428f, 0.002732f, 0.003035f,
   0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, 0.005182f, 0.005605f,

+ 3 - 3
panda/src/pnmimage/convert_srgb.h

@@ -22,9 +22,9 @@
 // The below functions can encode and decode sRGB colors in various
 // representations.  Some of them are implemented using look-up tables,
 // some others using SSE2 intrinsics.
-extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const unsigned char to_srgb8_table[256];
-extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const unsigned char to_linear_uchar_table[256];
-extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const float to_linear_float_table[256];
+extern EXPCL_PANDA_PNMIMAGE const unsigned char to_srgb8_table[256];
+extern EXPCL_PANDA_PNMIMAGE const unsigned char to_linear_uchar_table[256];
+extern EXPCL_PANDA_PNMIMAGE const float to_linear_float_table[256];
 
 EXPCL_PANDA_PNMIMAGE INLINE float decode_sRGB_float(unsigned char val);
 EXPCL_PANDA_PNMIMAGE INLINE float decode_sRGB_float(float val);

+ 78 - 31
panda/src/rocket/rocketRenderInterface.cxx

@@ -66,7 +66,10 @@ render(Rocket::Core::Context* context, CullTraverser *trav) {
 //  Description: Called internally to make a Geom from Rocket data.
 ////////////////////////////////////////////////////////////////////
 PT(Geom) RocketRenderInterface::
-make_geom(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, GeomEnums::UsageHint uh) {
+make_geom(Rocket::Core::Vertex* vertices,
+          int num_vertices, int* indices, int num_indices,
+          GeomEnums::UsageHint uh, const LVecBase2 &tex_scale) {
+
   PT(GeomVertexData) vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4t2(), uh);
   vdata->unclean_set_num_rows(num_vertices);
   {
@@ -81,7 +84,8 @@ make_geom(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int nu
       vwriter.add_data3f(LVector3f::right() * vertex.position.x + LVector3f::up() * vertex.position.y);
       cwriter.add_data4i(vertex.colour.red, vertex.colour.green,
                          vertex.colour.blue, vertex.colour.alpha);
-      twriter.add_data2f(vertex.tex_coord.x, 1.0f - vertex.tex_coord.y);
+      twriter.add_data2f(vertex.tex_coord.x * tex_scale[0],
+                         (1.0f - vertex.tex_coord.y) * tex_scale[1]);
     }
   }
 
@@ -140,12 +144,24 @@ render_geom(const Geom* geom, const RenderState* state, const Rocket::Core::Vect
 //               that the application does not wish to optimize.
 ////////////////////////////////////////////////////////////////////
 void RocketRenderInterface::
-RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation) {
-  PT(Geom) geom = make_geom(vertices, num_vertices, indices, num_indices, GeomEnums::UH_stream);
+RenderGeometry(Rocket::Core::Vertex* vertices,
+               int num_vertices, int* indices, int num_indices,
+               Rocket::Core::TextureHandle thandle,
+               const Rocket::Core::Vector2f& translation) {
+
+  Texture *texture = (Texture *)thandle;
+
+  LVecBase2 tex_scale(1, 1);
+  if (texture != (Texture *)NULL) {
+    tex_scale = texture->get_tex_scale();
+  }
+
+  PT(Geom) geom = make_geom(vertices, num_vertices, indices, num_indices,
+                            GeomEnums::UH_stream, tex_scale);
 
   CPT(RenderState) state;
-  if ((Texture*) texture != (Texture*) NULL) {
-    state = RenderState::make(TextureAttrib::make((Texture*) texture));
+  if (texture != (Texture *)NULL) {
+    state = RenderState::make(TextureAttrib::make(texture));
   } else {
     state = RenderState::make_empty();
   }
@@ -160,30 +176,40 @@ RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, i
 //               it believes will be static for the forseeable future.
 ////////////////////////////////////////////////////////////////////
 Rocket::Core::CompiledGeometryHandle RocketRenderInterface::
-CompileGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture) {
+CompileGeometry(Rocket::Core::Vertex* vertices,
+                int num_vertices, int* indices, int num_indices,
+                Rocket::Core::TextureHandle thandle) {
+
+  Texture *texture = (Texture *)thandle;
 
   CompiledGeometry *c = new CompiledGeometry;
-  c->_geom = make_geom(vertices, num_vertices, indices, num_indices, GeomEnums::UH_static);
+  LVecBase2 tex_scale(1, 1);
+
+  if (texture != (Texture *)NULL) {
+    rocket_cat.debug()
+      << "Compiling geom " << c->_geom << " with texture '"
+      << texture->get_name() << "'\n";
+
+    tex_scale = texture->get_tex_scale();
 
-  if ((Texture*) texture != (Texture*) NULL) {
     PT(TextureStage) stage = new TextureStage("");
     stage->set_mode(TextureStage::M_modulate);
 
     CPT(TextureAttrib) attr = DCAST(TextureAttrib, TextureAttrib::make());
-    attr = DCAST(TextureAttrib, attr->add_on_stage(stage, (Texture*) texture));
+    attr = DCAST(TextureAttrib, attr->add_on_stage(stage, (Texture *)texture));
 
     c->_state = RenderState::make(attr);
 
-    rocket_cat.debug()
-      << "Compiled geom " << c->_geom << " with texture '"
-      << ((Texture*) texture)->get_name() << "'\n";
   } else {
-    c->_state = RenderState::make_empty();
-
     rocket_cat.debug()
-      << "Compiled geom " << c->_geom << " without texture\n";
+      << "Compiling geom " << c->_geom << " without texture\n";
+
+    c->_state = RenderState::make_empty();
   }
 
+  c->_geom = make_geom(vertices, num_vertices, indices, num_indices,
+                       GeomEnums::UH_static, tex_scale);
+
   return (Rocket::Core::CompiledGeometryHandle) c;
 }
 
@@ -222,7 +248,16 @@ LoadTexture(Rocket::Core::TextureHandle& texture_handle,
             Rocket::Core::Vector2i& texture_dimensions,
             const Rocket::Core::String& source) {
 
-  PT(Texture) tex = TexturePool::load_texture(Filename::from_os_specific(source.CString()));
+  // Prefer padding over scaling to avoid blurring people's pixel art.
+  LoaderOptions options;
+  if (Texture::get_textures_power_2() == ATS_none) {
+    options.set_auto_texture_scale(ATS_none);
+  } else {
+    options.set_auto_texture_scale(ATS_pad);
+  }
+
+  Filename fn = Filename::from_os_specific(source.CString());
+  PT(Texture) tex = TexturePool::load_texture(fn, 0, false, options);
   if (tex == NULL) {
     texture_handle = 0;
     texture_dimensions.x = 0;
@@ -233,8 +268,12 @@ LoadTexture(Rocket::Core::TextureHandle& texture_handle,
   tex->set_minfilter(SamplerState::FT_nearest);
   tex->set_magfilter(SamplerState::FT_nearest);
 
-  texture_dimensions.x = tex->get_x_size();
-  texture_dimensions.y = tex->get_y_size();
+  // Since libRocket may make layout decisions based on the size of
+  // the image, it's important that we give it the original size of
+  // the image file in order to produce consistent results.
+  texture_dimensions.x = tex->get_orig_file_x_size();
+  texture_dimensions.y = tex->get_orig_file_y_size();
+
   tex->ref();
   texture_handle = (Rocket::Core::TextureHandle) tex.p();
 
@@ -255,18 +294,26 @@ GenerateTexture(Rocket::Core::TextureHandle& texture_handle,
   PT(Texture) tex = new Texture;
   tex->setup_2d_texture(source_dimensions.x, source_dimensions.y,
                         Texture::T_unsigned_byte, Texture::F_rgba);
+
+  // Pad to nearest power of two if necessary.  It may not be necessary
+  // as libRocket seems to give power-of-two sizes already, but can't hurt.
+  tex->set_size_padded(source_dimensions.x, source_dimensions.y);
+
   PTA_uchar image = tex->modify_ram_image();
 
   // Convert RGBA to BGRA
-  size_t row_size = source_dimensions.x * 4;
-  size_t y2 = image.size();
-  for (size_t y = 0; y < image.size(); y += row_size) {
-    y2 -= row_size;
-    for (size_t i = 0; i < row_size; i += 4) {
-      image[y2 + i + 0] = source[y + i + 2];
-      image[y2 + i + 1] = source[y + i + 1];
-      image[y2 + i + 2] = source[y + i];
-      image[y2 + i + 3] = source[y + i + 3];
+  size_t src_stride = source_dimensions.x * 4;
+  size_t dst_stride = tex->get_x_size() * 4;
+  const unsigned char *src_ptr = source + (src_stride * source_dimensions.y);
+  unsigned char *dst_ptr = &image[0];
+
+  for (; src_ptr >= source; dst_ptr += dst_stride) {
+    src_ptr -= src_stride;
+    for (size_t i = 0; i < src_stride; i += 4) {
+      dst_ptr[i + 0] = src_ptr[i + 2];
+      dst_ptr[i + 1] = src_ptr[i + 1];
+      dst_ptr[i + 2] = src_ptr[i];
+      dst_ptr[i + 3] = src_ptr[i + 3];
     }
   }
 
@@ -289,9 +336,9 @@ GenerateTexture(Rocket::Core::TextureHandle& texture_handle,
 ////////////////////////////////////////////////////////////////////
 void RocketRenderInterface::
 ReleaseTexture(Rocket::Core::TextureHandle texture_handle) {
-  Texture* tex = (Texture*) texture_handle;
-  if (tex != (Texture*) NULL) {
-    tex->unref();
+  Texture *tex = (Texture *)texture_handle;
+  if (tex != (Texture *)NULL) {
+    unref_delete(tex);
   }
 }
 

+ 4 - 1
panda/src/rocket/rocketRenderInterface.h

@@ -39,7 +39,9 @@ protected:
     CPT(RenderState) _state;
   };
 
-  PT(Geom) make_geom(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, GeomEnums::UsageHint uh);
+  PT(Geom) make_geom(Rocket::Core::Vertex* vertices,
+                     int num_vertices, int* indices, int num_indices,
+                     GeomEnums::UsageHint uh, const LVecBase2 &tex_scale);
   void render_geom(const Geom* geom, const RenderState* state, const Rocket::Core::Vector2f& translation);
 
   void RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation);
@@ -70,6 +72,7 @@ private:
   CPT(TransformState) _net_transform;
   CPT(RenderState) _net_state;
   Rocket::Core::Vector2i _dimensions;
+
 };
 
 #endif

+ 4 - 0
panda/src/tinydisplay/tinyGraphicsStateGuardian.cxx

@@ -2708,6 +2708,10 @@ setup_gltex(GLTexture *gltex, int x_size, int y_size, int num_levels) {
   int t_bits = get_tex_shift(y_size);
 
   if (s_bits < 0 || t_bits < 0) {
+    tinydisplay_cat.error()
+      << "Texture size " << x_size << 'x' << y_size
+      << " unsupported: dimensions must be power of two"
+      << " and smaller than " << _max_texture_dimension << '\n';
     return false;
   }
 

+ 8 - 20
pandatool/src/pandatoolbase/pandatoolsymbols.h

@@ -17,32 +17,20 @@
 
 /* See dtoolsymbols.h for a rant on the purpose of this file.  */
 
-#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_ASSIMP
-  #define EXPCL_ASSIMP __declspec(dllexport)
-  #define EXPTP_ASSIMP
+  #define EXPCL_ASSIMP EXPORT_CLASS
+  #define EXPTP_ASSIMP EXPORT_TEMPL
 #else
-  #define EXPCL_ASSIMP __declspec(dllimport)
-  #define EXPTP_ASSIMP extern
+  #define EXPCL_ASSIMP IMPORT_CLASS
+  #define EXPTP_ASSIMP IMPORT_TEMPL
 #endif
 
 #ifdef BUILDING_PTLOADER
-  #define EXPCL_PTLOADER __declspec(dllexport)
-  #define EXPTP_PTLOADER
+  #define EXPCL_PTLOADER EXPORT_CLASS
+  #define EXPTP_PTLOADER EXPORT_TEMPL
 #else
-  #define EXPCL_PTLOADER __declspec(dllimport)
-  #define EXPTP_PTLOADER extern
+  #define EXPCL_PTLOADER IMPORT_CLASS
+  #define EXPTP_PTLOADER IMPORT_TEMPL
 #endif
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_ASSIMP
-#define EXPTP_ASSIMP
-
-#define EXPCL_PTLOADER
-#define EXPTP_PTLOADER
-
-#endif  /* WIN32_VC */
-
 #endif

Some files were not shown because too many files changed in this diff