Merge branch 'release/1.9.x'

This commit is contained in:
rdb 2015-06-03 20:26:22 +02:00
commit a70878c4ef
26 changed files with 3055 additions and 3094 deletions

View File

@ -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
-----

View File

@ -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

View File

@ -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

View File

@ -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 Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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. */

View File

@ -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>

View File

@ -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-"

View File

@ -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

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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));

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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