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:
 command prompt using the following command:
 
 
 ```bash
 ```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
 When the build succeeds, it will produce an .exe file that you can use to
 install Panda3D on your system.
 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
 Linux
 -----
 -----
 
 

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

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

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

@@ -17,21 +17,12 @@
 
 
 /* See dtoolsymbols.h for a rant on the purpose of this file.  */
 /* 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
 #ifdef BUILDING_DIRECT
-  #define EXPCL_DIRECT __declspec(dllexport)
-  #define EXPTP_DIRECT
+  #define EXPCL_DIRECT EXPORT_CLASS
+  #define EXPTP_DIRECT EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_DIRECT __declspec(dllimport)
-  #define EXPTP_DIRECT extern
+  #define EXPCL_DIRECT IMPORT_CLASS
+  #define EXPTP_DIRECT IMPORT_TEMPL
 #endif
 #endif
 
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_DIRECT
-#define EXPTP_DIRECT
-
-#endif  /* WIN32_VC */
-
 #endif
 #endif

+ 1 - 1
dtool/PandaVersion.pp

@@ -3,7 +3,7 @@
 // ppremake scripts for Panda.
 // ppremake scripts for Panda.
 
 
 // Use spaces to separate the major, minor, and sequence numbers here.
 // 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
 // This variable will be defined to false in the CVS repository, but
 // scripts that generate source tarballs and/or binary releases for
 // 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_BOOL = 300,
      KW_CATCH = 301,
      KW_CATCH = 301,
      KW_CHAR = 302,
      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
 #endif
 /* Tokens.  */
 /* Tokens.  */
@@ -196,63 +198,65 @@ extern int cppyydebug;
 #define KW_BOOL 300
 #define KW_BOOL 300
 #define KW_CATCH 301
 #define KW_CATCH 301
 #define KW_CHAR 302
 #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
 #define EXTEND
 #endif
 #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
 #ifdef __cplusplus
 #include "dtoolbase_cc.h"
 #include "dtoolbase_cc.h"
 #endif
 #endif

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

@@ -174,7 +174,7 @@ typedef ios::seekdir ios_seekdir;
 #  define MOVE(x) x
 #  define MOVE(x) x
 #endif
 #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
 // This macro must be used to export an instantiated template class
 // from a DLL.  If the template class name itself contains commas, it
 // 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
 // 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
 #define EXPCL_EMPTY
 
 
-#if defined(WIN32_VC) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_DTOOL
 #ifdef BUILDING_DTOOL
-  #define EXPCL_DTOOL __declspec(dllexport)
-  #define EXPTP_DTOOL
+  #define EXPCL_DTOOL EXPORT_CLASS
+  #define EXPTP_DTOOL EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_DTOOL __declspec(dllimport)
-  #define EXPTP_DTOOL extern
+  #define EXPCL_DTOOL IMPORT_CLASS
+  #define EXPTP_DTOOL IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_DTOOLCONFIG
 #ifdef BUILDING_DTOOLCONFIG
-  #define EXPCL_DTOOLCONFIG __declspec(dllexport)
-  #define EXPTP_DTOOLCONFIG
+  #define EXPCL_DTOOLCONFIG EXPORT_CLASS
+  #define EXPTP_DTOOLCONFIG EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_DTOOLCONFIG __declspec(dllimport)
-  #define EXPTP_DTOOLCONFIG extern
+  #define EXPCL_DTOOLCONFIG IMPORT_CLASS
+  #define EXPTP_DTOOLCONFIG IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_MISC
 #ifdef BUILDING_MISC
-  #define EXPCL_MISC __declspec(dllexport)
-  #define EXPTP_MISC
+  #define EXPCL_MISC EXPORT_CLASS
+  #define EXPTP_MISC EXPORT_TEMPL
 #else /* BUILDING_MISC */
 #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 */
 #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
 /* These two are always defined empty, because pystub is statically
    built.  But we leave the symbol around in case we change our minds
    built.  But we leave the symbol around in case we change our minds
    to make pystub once again be a dynamic library. */
    to make pystub once again be a dynamic library. */

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

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

+ 16 - 6
makepanda/makepanda.py

@@ -913,9 +913,19 @@ if (COMPILER=="GCC"):
 
 
 DefSymbol("WITHINPANDA", "WITHIN_PANDA", "1")
 DefSymbol("WITHINPANDA", "WITHIN_PANDA", "1")
 if GetLinkAllStatic():
 if GetLinkAllStatic():
-    DefSymbol("ALWAYS", "LINK_ALL_STATIC", "")
+    DefSymbol("ALWAYS", "LINK_ALL_STATIC")
 if GetTarget() == 'android':
 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==1): cmd += " /MDd /Zi /RTCs /GS"
             if (optlevel==2): cmd += " /MDd /Zi"
             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):
             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"
             cmd += " /Fd" + os.path.splitext(obj)[0] + ".pdb"
 
 
@@ -1036,7 +1046,7 @@ def CompileCxx(obj,src,opts):
             if 'EXCEPTIONS' in opts:
             if 'EXCEPTIONS' in opts:
                 cmd += " /EHsc"
                 cmd += " /EHsc"
             else:
             else:
-                cmd += " -D_HAS_EXCEPTIONS=0"
+                cmd += " /D_HAS_EXCEPTIONS=0"
 
 
             if 'RTTI' not in opts:
             if 'RTTI' not in opts:
                  cmd += " /GR-"
                  cmd += " /GR-"

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

@@ -20,8 +20,6 @@
 #include "animChannel.h"
 #include "animChannel.h"
 #include "luse.h"
 #include "luse.h"
 
 
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_CHAN, EXPTP_PANDA_CHAN, AnimChannel<ACMatrixSwitchType>);
-
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //       Class : AnimChannelMatrixFixed
 //       Class : AnimChannelMatrixFixed
 // Description : A specialization on AnimChannel to add all the
 // 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;
   static TypeHandle _type_handle;
 };
 };
 
 
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_DISPLAY, EXPTP_PANDA_DISPLAY, epvector<DisplayRegion::Region>);
+
 #include "displayRegion.I"
 #include "displayRegion.I"
 
 
 #endif /* DISPLAYREGION_H */
 #endif /* DISPLAYREGION_H */

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

@@ -65,6 +65,9 @@ private:
   Morphs _morphs;
   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<EggMorphVertex> EggMorphVertexList;
 typedef EggMorphList<EggMorphNormal> EggMorphNormalList;
 typedef EggMorphList<EggMorphNormal> EggMorphNormalList;
 typedef EggMorphList<EggMorphTexCoord> EggMorphTexCoordList;
 typedef EggMorphList<EggMorphTexCoord> EggMorphTexCoordList;

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

@@ -29,10 +29,14 @@
 //               rather than defining the pta again.
 //               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, PointerToBase<ReferenceCountedVector<uchar> >)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, PointerToArrayBase<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, PointerToArray<unsigned char>)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, ConstPointerToArray<unsigned char>)
 EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEXPRESS, EXPTP_PANDAEXPRESS, ConstPointerToArray<unsigned char>)
+#endif
 
 
 typedef PointerToArray<unsigned char> PTA_uchar;
 typedef PointerToArray<unsigned char> PTA_uchar;
 typedef ConstPointerToArray<unsigned char> CPTA_uchar;
 typedef ConstPointerToArray<unsigned char> CPTA_uchar;

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

@@ -607,6 +607,8 @@ private:
   static TypeHandle _type_handle;
   static TypeHandle _type_handle;
 };
 };
 
 
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_GOBJ, EXPTP_PANDA_GOBJ, epvector<Shader::ShaderMatSpec>);
+
 #include "shader.I"
 #include "shader.I"
 
 
 #endif
 #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);
   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
   // If it's a floating-point image file, read it by default into a
   // floating-point texture.
   // floating-point texture.
   bool read_floating_point;
   bool read_floating_point;
@@ -2929,9 +2931,7 @@ do_read_one(CData *cdata, const Filename &fullpath, const Filename &alpha_fullpa
       y_size = 1;
       y_size = 1;
 
 
     } else {
     } 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) {
     if (read_floating_point) {
@@ -2949,9 +2949,15 @@ do_read_one(CData *cdata, const Filename &fullpath, const Filename &alpha_fullpa
 
 
   } else {
   } else {
     if (z == 0 && n == 0) {
     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 {
     } else {
       image.set_read_size(do_get_expected_mipmap_x_size(cdata, n),
       image.set_read_size(do_get_expected_mipmap_x_size(cdata, n),
                           do_get_expected_mipmap_y_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
    C++-style comments, since this file is occasionally included by a C
    file. */
    file. */
 
 
-#if (defined(WIN32_VC) || defined(WIN64_VC)) && !defined(CPPPARSER) && !defined(LINK_ALL_STATIC)
-
 #ifdef BUILDING_CFTALK
 #ifdef BUILDING_CFTALK
-  #define EXPCL_CFTALK __declspec(dllexport)
-  #define EXPTP_CFTALK
+  #define EXPCL_CFTALK EXPORT_CLASS
+  #define EXPTP_CFTALK EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_CFTALK __declspec(dllimport)
-  #define EXPTP_CFTALK extern
+  #define EXPCL_CFTALK IMPORT_CLASS
+  #define EXPTP_CFTALK IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_COLLADA
 #ifdef BUILDING_COLLADA
-  #define EXPCL_COLLADA __declspec(dllexport)
-  #define EXPTP_COLLADA
+  #define EXPCL_COLLADA EXPORT_CLASS
+  #define EXPTP_COLLADA EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_COLLADA __declspec(dllimport)
-  #define EXPTP_COLLADA extern
+  #define EXPCL_COLLADA IMPORT_CLASS
+  #define EXPTP_COLLADA IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_FFMPEG
 #ifdef BUILDING_FFMPEG
-  #define EXPCL_FFMPEG __declspec(dllexport)
-  #define EXPTP_FFMPEG
+  #define EXPCL_FFMPEG EXPORT_CLASS
+  #define EXPTP_FFMPEG EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_FFMPEG __declspec(dllimport)
-  #define EXPTP_FFMPEG extern
+  #define EXPCL_FFMPEG IMPORT_CLASS
+  #define EXPTP_FFMPEG IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_FRAMEWORK
 #ifdef BUILDING_FRAMEWORK
-  #define EXPCL_FRAMEWORK __declspec(dllexport)
-  #define EXPTP_FRAMEWORK
+  #define EXPCL_FRAMEWORK EXPORT_CLASS
+  #define EXPTP_FRAMEWORK EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_FRAMEWORK __declspec(dllimport)
-  #define EXPTP_FRAMEWORK extern
+  #define EXPCL_FRAMEWORK IMPORT_CLASS
+  #define EXPTP_FRAMEWORK IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_LINUX_AUDIO
 #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
 #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
 #endif
 
 
 #ifdef BUILDING_MILES_AUDIO
 #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
 #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
 #endif
 
 
 #ifdef BUILDING_FMOD_AUDIO
 #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
 #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
 #endif
 
 
 #ifdef BUILDING_OCULUSVR
 #ifdef BUILDING_OCULUSVR
-  #define EXPCL_OCULUSVR __declspec(dllexport)
-  #define EXPTP_OCULUSVR
+  #define EXPCL_OCULUSVR EXPORT_CLASS
+  #define EXPTP_OCULUSVR EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_OCULUSVR __declspec(dllimport)
-  #define EXPTP_OCULUSVR extern
+  #define EXPCL_OCULUSVR IMPORT_CLASS
+  #define EXPTP_OCULUSVR IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_OPENAL_AUDIO
 #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
 #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
 #endif
 
 
 #ifdef BUILDING_PANDA
 #ifdef BUILDING_PANDA
-  #define EXPCL_PANDA __declspec(dllexport)
-  #define EXPTP_PANDA
+  #define EXPCL_PANDA EXPORT_CLASS
+  #define EXPTP_PANDA EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDA __declspec(dllimport)
-  #define EXPTP_PANDA extern
+  #define EXPCL_PANDA IMPORT_CLASS
+  #define EXPTP_PANDA IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAAWESOMIUM
 #ifdef BUILDING_PANDAAWESOMIUM
-  #define EXPCL_PANDAAWESOMIUM __declspec(dllexport)
-  #define EXPTP_PANDAAWESOMIUM
+  #define EXPCL_PANDAAWESOMIUM EXPORT_CLASS
+  #define EXPTP_PANDAAWESOMIUM EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAAWESOMIUM __declspec(dllimport)
-  #define EXPTP_PANDAAWESOMIUM extern
+  #define EXPCL_PANDAAWESOMIUM IMPORT_CLASS
+  #define EXPTP_PANDAAWESOMIUM IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDABULLET
 #ifdef BUILDING_PANDABULLET
-  #define EXPCL_PANDABULLET __declspec(dllexport)
-  #define EXPTP_PANDABULLET
+  #define EXPCL_PANDABULLET EXPORT_CLASS
+  #define EXPTP_PANDABULLET EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDABULLET __declspec(dllimport)
-  #define EXPTP_PANDABULLET extern
+  #define EXPCL_PANDABULLET IMPORT_CLASS
+  #define EXPTP_PANDABULLET IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDACR
 #ifdef BUILDING_PANDACR
-  #define EXPCL_PANDACR __declspec(dllexport)
-  #define EXPTP_PANDACR
+  #define EXPCL_PANDACR EXPORT_CLASS
+  #define EXPTP_PANDACR EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDACR __declspec(dllimport)
-  #define EXPTP_PANDACR extern
+  #define EXPCL_PANDACR IMPORT_CLASS
+  #define EXPTP_PANDACR IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDADX
 #ifdef BUILDING_PANDADX
-  #define EXPCL_PANDADX __declspec(dllexport)
-  #define EXPTP_PANDADX
+  #define EXPCL_PANDADX EXPORT_CLASS
+  #define EXPTP_PANDADX EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDADX __declspec(dllimport)
-  #define EXPTP_PANDADX extern
+  #define EXPCL_PANDADX IMPORT_CLASS
+  #define EXPTP_PANDADX IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAEGG
 #ifdef BUILDING_PANDAEGG
-  #define EXPCL_PANDAEGG __declspec(dllexport)
-  #define EXPTP_PANDAEGG
+  #define EXPCL_PANDAEGG EXPORT_CLASS
+  #define EXPTP_PANDAEGG EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAEGG __declspec(dllimport)
-  #define EXPTP_PANDAEGG extern
+  #define EXPCL_PANDAEGG IMPORT_CLASS
+  #define EXPTP_PANDAEGG IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAEXPRESS
 #ifdef BUILDING_PANDAEXPRESS
-  #define EXPCL_PANDAEXPRESS __declspec(dllexport)
-  #define EXPTP_PANDAEXPRESS
+  #define EXPCL_PANDAEXPRESS EXPORT_CLASS
+  #define EXPTP_PANDAEXPRESS EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAEXPRESS __declspec(dllimport)
-  #define EXPTP_PANDAEXPRESS extern
+  #define EXPCL_PANDAEXPRESS IMPORT_CLASS
+  #define EXPTP_PANDAEXPRESS IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAFX
 #ifdef BUILDING_PANDAFX
-  #define EXPCL_PANDAFX __declspec(dllexport)
-  #define EXPTP_PANDAFX
+  #define EXPCL_PANDAFX EXPORT_CLASS
+  #define EXPTP_PANDAFX EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAFX __declspec(dllimport)
-  #define EXPTP_PANDAFX extern
+  #define EXPCL_PANDAFX IMPORT_CLASS
+  #define EXPTP_PANDAFX IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAGL
 #ifdef BUILDING_PANDAGL
-  #define EXPCL_PANDAGL __declspec(dllexport)
-  #define EXPTP_PANDAGL
+  #define EXPCL_PANDAGL EXPORT_CLASS
+  #define EXPTP_PANDAGL EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAGL __declspec(dllimport)
-  #define EXPTP_PANDAGL extern
+  #define EXPCL_PANDAGL IMPORT_CLASS
+  #define EXPTP_PANDAGL IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAGLES
 #ifdef BUILDING_PANDAGLES
-  #define EXPCL_PANDAGLES __declspec(dllexport)
-  #define EXPTP_PANDAGLES
+  #define EXPCL_PANDAGLES EXPORT_CLASS
+  #define EXPTP_PANDAGLES EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAGLES __declspec(dllimport)
-  #define EXPTP_PANDAGLES extern
+  #define EXPCL_PANDAGLES IMPORT_CLASS
+  #define EXPTP_PANDAGLES IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAGLES2
 #ifdef BUILDING_PANDAGLES2
-  #define EXPCL_PANDAGLES2 __declspec(dllexport)
-  #define EXPTP_PANDAGLES2
+  #define EXPCL_PANDAGLES2 EXPORT_CLASS
+  #define EXPTP_PANDAGLES2 EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAGLES2 __declspec(dllimport)
-  #define EXPTP_PANDAGLES2 extern
+  #define EXPCL_PANDAGLES2 IMPORT_CLASS
+  #define EXPTP_PANDAGLES2 IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAODE
 #ifdef BUILDING_PANDAODE
-  #define EXPCL_PANDAODE __declspec(dllexport)
-  #define EXPTP_PANDAODE
+  #define EXPCL_PANDAODE EXPORT_CLASS
+  #define EXPTP_PANDAODE EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAODE __declspec(dllimport)
-  #define EXPTP_PANDAODE extern
+  #define EXPCL_PANDAODE IMPORT_CLASS
+  #define EXPTP_PANDAODE IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAPHYSICS
 #ifdef BUILDING_PANDAPHYSICS
-  #define EXPCL_PANDAPHYSICS __declspec(dllexport)
-  #define EXPTP_PANDAPHYSICS
+  #define EXPCL_PANDAPHYSICS EXPORT_CLASS
+  #define EXPTP_PANDAPHYSICS EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAPHYSICS __declspec(dllimport)
-  #define EXPTP_PANDAPHYSICS extern
+  #define EXPCL_PANDAPHYSICS IMPORT_CLASS
+  #define EXPTP_PANDAPHYSICS IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAPHYSX
 #ifdef BUILDING_PANDAPHYSX
-  #define EXPCL_PANDAPHYSX __declspec(dllexport)
-  #define EXPTP_PANDAPHYSX
+  #define EXPCL_PANDAPHYSX EXPORT_CLASS
+  #define EXPTP_PANDAPHYSX EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAPHYSX __declspec(dllimport)
-  #define EXPTP_PANDAPHYSX extern
+  #define EXPCL_PANDAPHYSX IMPORT_CLASS
+  #define EXPTP_PANDAPHYSX IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDASPEEDTREE
 #ifdef BUILDING_PANDASPEEDTREE
-  #define EXPCL_PANDASPEEDTREE __declspec(dllexport)
-  #define EXPTP_PANDASPEEDTREE
+  #define EXPCL_PANDASPEEDTREE EXPORT_CLASS
+  #define EXPTP_PANDASPEEDTREE EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDASPEEDTREE __declspec(dllimport)
-  #define EXPTP_PANDASPEEDTREE extern
+  #define EXPCL_PANDASPEEDTREE IMPORT_CLASS
+  #define EXPTP_PANDASPEEDTREE IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDASKEL
 #ifdef BUILDING_PANDASKEL
-  #define EXPCL_PANDASKEL __declspec(dllexport)
-  #define EXPTP_PANDASKEL
+  #define EXPCL_PANDASKEL EXPORT_CLASS
+  #define EXPTP_PANDASKEL EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDASKEL __declspec(dllimport)
-  #define EXPTP_PANDASKEL extern
+  #define EXPCL_PANDASKEL IMPORT_CLASS
+  #define EXPTP_PANDASKEL IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAWIN
 #ifdef BUILDING_PANDAWIN
-  #define EXPCL_PANDAWIN __declspec(dllexport)
-  #define EXPTP_PANDAWIN
+  #define EXPCL_PANDAWIN EXPORT_CLASS
+  #define EXPTP_PANDAWIN EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAWIN __declspec(dllimport)
-  #define EXPTP_PANDAWIN extern
+  #define EXPCL_PANDAWIN IMPORT_CLASS
+  #define EXPTP_PANDAWIN IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PANDAX11
 #ifdef BUILDING_PANDAX11
-  #define EXPCL_PANDAX11 __declspec(dllexport)
-  #define EXPTP_PANDAX11
+  #define EXPCL_PANDAX11 EXPORT_CLASS
+  #define EXPTP_PANDAX11 EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PANDAX11 __declspec(dllimport)
-  #define EXPTP_PANDAX11 extern
+  #define EXPCL_PANDAX11 IMPORT_CLASS
+  #define EXPTP_PANDAX11 IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_ROCKET
 #ifdef BUILDING_ROCKET
-  #define EXPCL_ROCKET __declspec(dllexport)
-  #define EXPTP_ROCKET
+  #define EXPCL_ROCKET EXPORT_CLASS
+  #define EXPTP_ROCKET EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_ROCKET __declspec(dllimport)
-  #define EXPTP_ROCKET extern
+  #define EXPCL_ROCKET IMPORT_CLASS
+  #define EXPTP_ROCKET IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_SHADER
 #ifdef BUILDING_SHADER
-  #define EXPCL_SHADER __declspec(dllexport)
-  #define EXPTP_SHADER
+  #define EXPCL_SHADER EXPORT_CLASS
+  #define EXPTP_SHADER EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_SHADER __declspec(dllimport)
-  #define EXPTP_SHADER extern
+  #define EXPCL_SHADER IMPORT_CLASS
+  #define EXPTP_SHADER IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_TINYDISPLAY
 #ifdef BUILDING_TINYDISPLAY
-  #define EXPCL_TINYDISPLAY __declspec(dllexport)
-  #define EXPTP_TINYDISPLAY
+  #define EXPCL_TINYDISPLAY EXPORT_CLASS
+  #define EXPTP_TINYDISPLAY EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_TINYDISPLAY __declspec(dllimport)
-  #define EXPTP_TINYDISPLAY extern
+  #define EXPCL_TINYDISPLAY IMPORT_CLASS
+  #define EXPTP_TINYDISPLAY IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_VISION
 #ifdef BUILDING_VISION
-  #define EXPCL_VISION __declspec(dllexport)
-  #define EXPTP_VISION
+  #define EXPCL_VISION EXPORT_CLASS
+  #define EXPTP_VISION EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_VISION __declspec(dllimport)
-  #define EXPTP_VISION extern
+  #define EXPCL_VISION IMPORT_CLASS
+  #define EXPTP_VISION IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_VRPN
 #ifdef BUILDING_VRPN
-  #define EXPCL_VRPN __declspec(dllexport)
-  #define EXPTP_VRPN
+  #define EXPCL_VRPN EXPORT_CLASS
+  #define EXPTP_VRPN EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_VRPN __declspec(dllimport)
-  #define EXPTP_VRPN extern
+  #define EXPCL_VRPN IMPORT_CLASS
+  #define EXPTP_VRPN IMPORT_TEMPL
 #endif
 #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)
 #if (defined(WIN32_VC) || defined(WIN64_VC)) && !defined(CPPPARSER)
 #define INLINE_LINMATH __forceinline
 #define INLINE_LINMATH __forceinline
 #define INLINE_MATHUTIL __forceinline
 #define INLINE_MATHUTIL __forceinline

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

@@ -15,7 +15,7 @@
 #include "convert_srgb.h"
 #include "convert_srgb.h"
 
 
 // Lookup tables for converting from unsigned char formats.
 // 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,
 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,
   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,
   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,
   0xf9, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe,
   0xff, 0xff};
   0xff, 0xff};
 
 
-ALIGN_64BYTE const
+const
 unsigned char to_linear_uchar_table[256] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
 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,
   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,
   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,
   0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa,
   0xfd, 0xff};
   0xfd, 0xff};
 
 
-ALIGN_64BYTE
 const float to_linear_float_table[256] = { 0, 0.000304f, 0.000607f, 0.000911f,
 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.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,
   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
 // The below functions can encode and decode sRGB colors in various
 // representations.  Some of them are implemented using look-up tables,
 // representations.  Some of them are implemented using look-up tables,
 // some others using SSE2 intrinsics.
 // 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(unsigned char val);
 EXPCL_PANDA_PNMIMAGE INLINE float decode_sRGB_float(float 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.
 //  Description: Called internally to make a Geom from Rocket data.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 PT(Geom) RocketRenderInterface::
 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);
   PT(GeomVertexData) vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4t2(), uh);
   vdata->unclean_set_num_rows(num_vertices);
   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);
       vwriter.add_data3f(LVector3f::right() * vertex.position.x + LVector3f::up() * vertex.position.y);
       cwriter.add_data4i(vertex.colour.red, vertex.colour.green,
       cwriter.add_data4i(vertex.colour.red, vertex.colour.green,
                          vertex.colour.blue, vertex.colour.alpha);
                          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.
 //               that the application does not wish to optimize.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void RocketRenderInterface::
 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;
   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 {
   } else {
     state = RenderState::make_empty();
     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.
 //               it believes will be static for the forseeable future.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 Rocket::Core::CompiledGeometryHandle RocketRenderInterface::
 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;
   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("");
     PT(TextureStage) stage = new TextureStage("");
     stage->set_mode(TextureStage::M_modulate);
     stage->set_mode(TextureStage::M_modulate);
 
 
     CPT(TextureAttrib) attr = DCAST(TextureAttrib, TextureAttrib::make());
     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);
     c->_state = RenderState::make(attr);
 
 
-    rocket_cat.debug()
-      << "Compiled geom " << c->_geom << " with texture '"
-      << ((Texture*) texture)->get_name() << "'\n";
   } else {
   } else {
-    c->_state = RenderState::make_empty();
-
     rocket_cat.debug()
     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;
   return (Rocket::Core::CompiledGeometryHandle) c;
 }
 }
 
 
@@ -222,7 +248,16 @@ LoadTexture(Rocket::Core::TextureHandle& texture_handle,
             Rocket::Core::Vector2i& texture_dimensions,
             Rocket::Core::Vector2i& texture_dimensions,
             const Rocket::Core::String& source) {
             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) {
   if (tex == NULL) {
     texture_handle = 0;
     texture_handle = 0;
     texture_dimensions.x = 0;
     texture_dimensions.x = 0;
@@ -233,8 +268,12 @@ LoadTexture(Rocket::Core::TextureHandle& texture_handle,
   tex->set_minfilter(SamplerState::FT_nearest);
   tex->set_minfilter(SamplerState::FT_nearest);
   tex->set_magfilter(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();
   tex->ref();
   texture_handle = (Rocket::Core::TextureHandle) tex.p();
   texture_handle = (Rocket::Core::TextureHandle) tex.p();
 
 
@@ -255,18 +294,26 @@ GenerateTexture(Rocket::Core::TextureHandle& texture_handle,
   PT(Texture) tex = new Texture;
   PT(Texture) tex = new Texture;
   tex->setup_2d_texture(source_dimensions.x, source_dimensions.y,
   tex->setup_2d_texture(source_dimensions.x, source_dimensions.y,
                         Texture::T_unsigned_byte, Texture::F_rgba);
                         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();
   PTA_uchar image = tex->modify_ram_image();
 
 
   // Convert RGBA to BGRA
   // 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::
 void RocketRenderInterface::
 ReleaseTexture(Rocket::Core::TextureHandle texture_handle) {
 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;
     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 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);
   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(TransformState) _net_transform;
   CPT(RenderState) _net_state;
   CPT(RenderState) _net_state;
   Rocket::Core::Vector2i _dimensions;
   Rocket::Core::Vector2i _dimensions;
+
 };
 };
 
 
 #endif
 #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);
   int t_bits = get_tex_shift(y_size);
 
 
   if (s_bits < 0 || t_bits < 0) {
   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;
     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.  */
 /* 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
 #ifdef BUILDING_ASSIMP
-  #define EXPCL_ASSIMP __declspec(dllexport)
-  #define EXPTP_ASSIMP
+  #define EXPCL_ASSIMP EXPORT_CLASS
+  #define EXPTP_ASSIMP EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_ASSIMP __declspec(dllimport)
-  #define EXPTP_ASSIMP extern
+  #define EXPCL_ASSIMP IMPORT_CLASS
+  #define EXPTP_ASSIMP IMPORT_TEMPL
 #endif
 #endif
 
 
 #ifdef BUILDING_PTLOADER
 #ifdef BUILDING_PTLOADER
-  #define EXPCL_PTLOADER __declspec(dllexport)
-  #define EXPTP_PTLOADER
+  #define EXPCL_PTLOADER EXPORT_CLASS
+  #define EXPTP_PTLOADER EXPORT_TEMPL
 #else
 #else
-  #define EXPCL_PTLOADER __declspec(dllimport)
-  #define EXPTP_PTLOADER extern
+  #define EXPCL_PTLOADER IMPORT_CLASS
+  #define EXPTP_PTLOADER IMPORT_TEMPL
 #endif
 #endif
 
 
-#else   /* !WIN32_VC */
-
-#define EXPCL_ASSIMP
-#define EXPTP_ASSIMP
-
-#define EXPCL_PTLOADER
-#define EXPTP_PTLOADER
-
-#endif  /* WIN32_VC */
-
 #endif
 #endif

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