Merge branch 'cmake' of https://github.com/panda3d/panda3d into cmake

This commit is contained in:
Donny Lawrence 2018-05-17 16:59:04 -05:00
commit 8b51b0faeb
130 changed files with 749 additions and 466 deletions

View File

@ -61,7 +61,7 @@ script:
- cmake -DHAVE_GTK2=NO -DBUILD_METALIBS=$BUILD_METALIBS -DCOMPOSITE_SOURCE_LIMIT=$COMPOSITE_SOURCE_LIMIT ..
- make -j4
after_script:
- export PYTHONPATH=$PWD
- python ../test_imports.py
- pytest ../tests

View File

@ -237,76 +237,74 @@ endfunction(interrogate_sources)
# Python module when it's initialized.
#
function(add_python_module module)
if(INTERROGATE_PYTHON_INTERFACE)
set(targets)
set(link_targets)
set(import_flags)
set(infiles)
set(sources)
set(link_keyword OFF)
set(import_keyword OFF)
foreach(arg ${ARGN})
if(arg STREQUAL "LINK")
set(link_keyword ON)
set(import_keyword OFF)
elseif(arg STREQUAL "IMPORT")
set(link_keyword OFF)
set(import_keyword ON)
elseif(link_keyword)
list(APPEND link_targets "${arg}")
elseif(import_keyword)
list(APPEND import_flags "-import" "${arg}")
else()
list(APPEND targets "${arg}")
endif()
endforeach(arg)
if(NOT link_targets)
set(link_targets ${targets})
endif()
foreach(target ${targets})
interrogate_sources(${target} "${target}_igate.cxx" "${target}.in"
"-python-native;-module;panda3d.${module}")
get_target_property(target_extensions "${target}" IGATE_EXTENSIONS)
list(APPEND infiles "${target}.in")
list(APPEND sources "${target}_igate.cxx" ${target_extensions})
endforeach(target)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
COMMAND interrogate_module
-oc "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
-module ${module} -library ${module}
${import_flags}
${INTERROGATE_MODULE_OPTIONS}
${IMOD_FLAGS} ${infiles}
DEPENDS interrogate_module ${infiles}
COMMENT "Generating module ${module}"
)
if(BUILD_SHARED_LIBS)
add_library(${module} MODULE "${module}_module.cxx" ${sources})
else()
add_library(${module} STATIC "${module}_module.cxx" ${sources})
endif()
target_link_libraries(${module}
${link_targets} ${PYTHON_LIBRARIES} p3dtool)
set_target_properties(${module} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
PREFIX ""
)
if(WIN32 AND NOT CYGWIN)
set_target_properties(${module} PROPERTIES SUFFIX ".pyd")
endif()
install(TARGETS ${module} DESTINATION "${PYTHON_ARCH_INSTALL_DIR}/panda3d")
list(APPEND ALL_INTERROGATE_MODULES "${module}")
set(ALL_INTERROGATE_MODULES "${ALL_INTERROGATE_MODULES}" CACHE INTERNAL "Internal variable")
if(NOT HAVE_PYTHON OR NOT INTERROGATE_PYTHON_INTERFACE)
return()
endif()
set(targets)
set(link_targets)
set(import_flags)
set(infiles)
set(sources)
set(link_keyword OFF)
set(import_keyword OFF)
foreach(arg ${ARGN})
if(arg STREQUAL "LINK")
set(link_keyword ON)
set(import_keyword OFF)
elseif(arg STREQUAL "IMPORT")
set(link_keyword OFF)
set(import_keyword ON)
elseif(link_keyword)
list(APPEND link_targets "${arg}")
elseif(import_keyword)
list(APPEND import_flags "-import" "${arg}")
else()
list(APPEND targets "${arg}")
endif()
endforeach(arg)
if(NOT link_targets)
set(link_targets ${targets})
endif()
foreach(target ${targets})
interrogate_sources(${target} "${target}_igate.cxx" "${target}.in"
"-python-native;-module;panda3d.${module}")
get_target_property(target_extensions "${target}" IGATE_EXTENSIONS)
list(APPEND infiles "${target}.in")
list(APPEND sources "${target}_igate.cxx" ${target_extensions})
endforeach(target)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
COMMAND interrogate_module
-oc "${CMAKE_CURRENT_BINARY_DIR}/${module}_module.cxx"
-module ${module} -library ${module}
${import_flags}
${INTERROGATE_MODULE_OPTIONS}
${IMOD_FLAGS} ${infiles}
DEPENDS interrogate_module ${infiles}
COMMENT "Generating module ${module}"
)
add_library(${module} ${MODULE_TYPE} "${module}_module.cxx" ${sources})
target_link_libraries(${module}
${link_targets} ${PYTHON_LIBRARIES} p3dtool)
set_target_properties(${module} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
PREFIX ""
)
if(WIN32 AND NOT CYGWIN)
set_target_properties(${module} PROPERTIES SUFFIX ".pyd")
endif()
install(TARGETS ${module} DESTINATION "${PYTHON_ARCH_INSTALL_DIR}/panda3d")
list(APPEND ALL_INTERROGATE_MODULES "${module}")
set(ALL_INTERROGATE_MODULES "${ALL_INTERROGATE_MODULES}" CACHE INTERNAL "Internal variable")
endfunction(add_python_module)

View File

@ -10,7 +10,7 @@ __all__ = ['indent',
'bound', 'clamp', 'lerp', 'average', 'addListsByValue',
'boolEqual', 'lineupPos', 'formatElapsedSeconds', 'solveQuadratic',
'findPythonModule', 'mostDerivedLast',
'weightedChoice', 'randFloat', 'normalDistrib',
'clampScalar', 'weightedChoice', 'randFloat', 'normalDistrib',
'weightedRand', 'randUint31', 'randInt32',
'SerialNumGen', 'serialNum', 'uniqueName', 'Enum', 'Singleton',
'SingletonError', 'printListEnum', 'safeRepr',
@ -178,27 +178,6 @@ class Queue:
def __len__(self):
return len(self.__list)
if __debug__ and __name__ == '__main__':
q = Queue()
assert q.isEmpty()
q.clear()
assert q.isEmpty()
q.push(10)
assert not q.isEmpty()
q.push(20)
assert not q.isEmpty()
assert len(q) == 2
assert q.front() == 10
assert q.back() == 20
assert q.top() == 10
assert q.top() == 10
assert q.pop() == 10
assert len(q) == 1
assert not q.isEmpty()
assert q.pop() == 20
assert len(q) == 0
assert q.isEmpty()
def indent(stream, numIndents, str):
"""
@ -1130,6 +1109,23 @@ def findPythonModule(module):
return None
def clampScalar(value, a, b):
# calling this ought to be faster than calling both min and max
if a < b:
if value < a:
return a
elif value > b:
return b
else:
return value
else:
if value < b:
return b
elif value > a:
return a
else:
return value
def weightedChoice(choiceList, rng=random.random, sum=None):
"""given a list of (weight, item) pairs, chooses an item based on the
weights. rng must return 0..1. if you happen to have the sum of the
@ -2313,36 +2309,6 @@ def flywheel(*args, **kArgs):
pass
return flywheel
if __debug__ and __name__ == '__main__':
f = flywheel(['a','b','c','d'], countList=[11,20,3,4])
obj2count = {}
for obj in f:
obj2count.setdefault(obj, 0)
obj2count[obj] += 1
assert obj2count['a'] == 11
assert obj2count['b'] == 20
assert obj2count['c'] == 3
assert obj2count['d'] == 4
f = flywheel([1,2,3,4], countFunc=lambda x: x*2)
obj2count = {}
for obj in f:
obj2count.setdefault(obj, 0)
obj2count[obj] += 1
assert obj2count[1] == 2
assert obj2count[2] == 4
assert obj2count[3] == 6
assert obj2count[4] == 8
f = flywheel([1,2,3,4], countFunc=lambda x: x, scale = 3)
obj2count = {}
for obj in f:
obj2count.setdefault(obj, 0)
obj2count[obj] += 1
assert obj2count[1] == 1 * 3
assert obj2count[2] == 2 * 3
assert obj2count[3] == 3 * 3
assert obj2count[4] == 4 * 3
if __debug__:
def quickProfile(name="unnamed"):
@ -2687,11 +2653,36 @@ def unescapeHtmlString(s):
result += char
return result
if __debug__ and __name__ == '__main__':
assert unescapeHtmlString('asdf') == 'asdf'
assert unescapeHtmlString('as+df') == 'as df'
assert unescapeHtmlString('as%32df') == 'as2df'
assert unescapeHtmlString('asdf%32') == 'asdf2'
class PriorityCallbacks:
""" manage a set of prioritized callbacks, and allow them to be invoked in order of priority """
def __init__(self):
self._callbacks = []
def clear(self):
del self._callbacks[:]
def add(self, callback, priority=None):
if priority is None:
priority = 0
callbacks = self._callbacks
lo = 0
hi = len(callbacks)
while lo < hi:
mid = (lo + hi) // 2
if priority < callbacks[mid][0]:
hi = mid
else:
lo = mid + 1
item = (priority, callback)
callbacks.insert(lo, item)
return item
def remove(self, item):
self._callbacks.remove(item)
def __call__(self):
for priority, callback in self._callbacks:
callback()
builtins.Functor = Functor
builtins.Stack = Stack

View File

@ -2672,15 +2672,18 @@ class ShowBase(DirectObject.DirectObject):
output file name (e.g. if sd = 4, movie_0001.png)
- source is the Window, Buffer, DisplayRegion, or Texture from which
to save the resulting images. The default is the main window.
The task is returned, so that it can be awaited.
"""
globalClock.setMode(ClockObject.MNonRealTime)
globalClock.setDt(1.0/float(fps))
t = taskMgr.add(self._movieTask, namePrefix + '_task')
t = self.taskMgr.add(self._movieTask, namePrefix + '_task')
t.frameIndex = 0 # Frame 0 is not captured.
t.numFrames = int(duration * fps)
t.source = source
t.outputString = namePrefix + '_%0' + repr(sd) + 'd.' + format
t.setUponDeath(lambda state: globalClock.setMode(ClockObject.MNormal))
return t
def _movieTask(self, state):
if state.frameIndex != 0:

View File

@ -23,7 +23,9 @@ class Transitions:
scale=3.0,
pos=Vec3(0, 0, 0)):
self.transitionIval = None
self.__transitionFuture = None
self.letterboxIval = None
self.__letterboxFuture = None
self.iris = None
self.fade = None
self.letterbox = None
@ -94,7 +96,9 @@ class Transitions:
"""
#self.noTransitions() masad: this creates a one frame pop, is it necessary?
self.loadFade()
transitionIval = Sequence(Func(self.fade.reparentTo, aspect2d, DGG.FADE_SORT_INDEX),
parent = aspect2d if self.fadeModel else render2d
transitionIval = Sequence(Func(self.fade.reparentTo, parent, DGG.FADE_SORT_INDEX),
Func(self.fade.showThrough), # in case aspect2d is hidden for some reason
self.lerpFunc(self.fade, t,
self.alphaOff,
@ -115,7 +119,8 @@ class Transitions:
self.noTransitions()
self.loadFade()
transitionIval = Sequence(Func(self.fade.reparentTo,aspect2d,DGG.FADE_SORT_INDEX),
parent = aspect2d if self.fadeModel else render2d
transitionIval = Sequence(Func(self.fade.reparentTo, parent, DGG.FADE_SORT_INDEX),
Func(self.fade.showThrough), # in case aspect2d is hidden for some reason
self.lerpFunc(self.fade, t,
self.alphaOn,
@ -148,11 +153,17 @@ class Transitions:
self.noTransitions()
self.loadFade()
self.fade.detachNode()
fut = AsyncFuture()
fut.setResult(None)
return fut
else:
# Create a sequence that lerps the color out, then
# parents the fade to hidden
self.transitionIval = self.getFadeInIval(t, finishIval)
self.transitionIval.append(Func(self.__finishTransition))
self.__transitionFuture = AsyncFuture()
self.transitionIval.start()
return self.__transitionFuture
def fadeOut(self, t=0.5, finishIval=None):
"""
@ -167,7 +178,9 @@ class Transitions:
# Fade out immediately with no lerp
self.noTransitions()
self.loadFade()
self.fade.reparentTo(aspect2d, DGG.FADE_SORT_INDEX)
parent = aspect2d if self.fadeModel else render2d
self.fade.reparentTo(parent, DGG.FADE_SORT_INDEX)
self.fade.setColor(self.alphaOn)
elif ConfigVariableBool('no-loading-screen', False):
if finishIval:
@ -176,8 +189,16 @@ class Transitions:
else:
# Create a sequence that lerps the color out, then
# parents the fade to hidden
self.transitionIval = self.getFadeOutIval(t,finishIval)
self.transitionIval = self.getFadeOutIval(t, finishIval)
self.transitionIval.append(Func(self.__finishTransition))
self.__transitionFuture = AsyncFuture()
self.transitionIval.start()
return self.__transitionFuture
# Immediately done, so return a dummy future.
fut = AsyncFuture()
fut.setResult(None)
return fut
def fadeOutActive(self):
return self.fade and self.fade.getColor()[3] > 0
@ -191,7 +212,9 @@ class Transitions:
#print "transitiosn: fadeScreen"
self.noTransitions()
self.loadFade()
self.fade.reparentTo(aspect2d, DGG.FADE_SORT_INDEX)
parent = aspect2d if self.fadeModel else render2d
self.fade.reparentTo(parent, DGG.FADE_SORT_INDEX)
self.fade.setColor(self.alphaOn[0],
self.alphaOn[1],
self.alphaOn[2],
@ -206,7 +229,9 @@ class Transitions:
#print "transitiosn: fadeScreenColor"
self.noTransitions()
self.loadFade()
self.fade.reparentTo(aspect2d, DGG.FADE_SORT_INDEX)
parent = aspect2d if self.fadeModel else render2d
self.fade.reparentTo(parent, DGG.FADE_SORT_INDEX)
self.fade.setColor(color)
def noFade(self):
@ -217,6 +242,9 @@ class Transitions:
if self.transitionIval:
self.transitionIval.pause()
self.transitionIval = None
if self.__transitionFuture:
self.__transitionFuture.cancel()
self.__transitionFuture = None
if self.fade:
# Make sure to reset the color, since fadeOutActive() is looking at it
self.fade.setColor(self.alphaOff)
@ -247,18 +275,25 @@ class Transitions:
self.loadIris()
if (t == 0):
self.iris.detachNode()
fut = AsyncFuture()
fut.setResult(None)
return fut
else:
self.iris.reparentTo(aspect2d, DGG.FADE_SORT_INDEX)
scale = 0.18 * max(base.a2dRight, base.a2dTop)
self.transitionIval = Sequence(LerpScaleInterval(self.iris, t,
scale = 0.18,
scale = scale,
startScale = 0.01),
Func(self.iris.detachNode),
Func(self.__finishTransition),
name = self.irisTaskName,
)
self.__transitionFuture = AsyncFuture()
if finishIval:
self.transitionIval.append(finishIval)
self.transitionIval.start()
return self.__transitionFuture
def irisOut(self, t=0.5, finishIval=None):
"""
@ -274,20 +309,27 @@ class Transitions:
if (t == 0):
self.iris.detachNode()
self.fadeOut(0)
fut = AsyncFuture()
fut.setResult(None)
return fut
else:
self.iris.reparentTo(aspect2d, DGG.FADE_SORT_INDEX)
scale = 0.18 * max(base.a2dRight, base.a2dTop)
self.transitionIval = Sequence(LerpScaleInterval(self.iris, t,
scale = 0.01,
startScale = 0.18),
startScale = scale),
Func(self.iris.detachNode),
# Use the fade to cover up the hole that the iris would leave
Func(self.fadeOut, 0),
Func(self.__finishTransition),
name = self.irisTaskName,
)
self.__transitionFuture = AsyncFuture()
if finishIval:
self.transitionIval.append(finishIval)
self.transitionIval.start()
return self.__transitionFuture
def noIris(self):
"""
@ -311,6 +353,11 @@ class Transitions:
# Letterbox is not really a transition, it is a screen overlay
# self.noLetterbox()
def __finishTransition(self):
if self.__transitionFuture:
self.__transitionFuture.setResult(None)
self.__transitionFuture = None
##################################################
# Letterbox
##################################################
@ -383,9 +430,17 @@ class Transitions:
if self.letterboxIval:
self.letterboxIval.pause()
self.letterboxIval = None
if self.__letterboxFuture:
self.__letterboxFuture.cancel()
self.__letterboxFuture = None
if self.letterbox:
self.letterbox.stash()
def __finishLetterbox(self):
if self.__letterboxFuture:
self.__letterboxFuture.setResult(None)
self.__letterboxFuture = None
def letterboxOn(self, t=0.25, finishIval=None):
"""
Move black bars in over t seconds.
@ -396,7 +451,11 @@ class Transitions:
if (t == 0):
self.letterboxBottom.setPos(0, 0, -1)
self.letterboxTop.setPos(0, 0, 0.8)
fut = AsyncFuture()
fut.setResult(None)
return fut
else:
self.__letterboxFuture = AsyncFuture()
self.letterboxIval = Sequence(Parallel(
LerpPosInterval(self.letterboxBottom,
t,
@ -409,11 +468,13 @@ class Transitions:
# startPos = Vec3(0, 0, 1),
),
),
Func(self.__finishLetterbox),
name = self.letterboxTaskName,
)
if finishIval:
self.letterboxIval.append(finishIval)
self.letterboxIval.start()
return self.__letterboxFuture
def letterboxOff(self, t=0.25, finishIval=None):
"""
@ -424,7 +485,11 @@ class Transitions:
self.letterbox.unstash()
if (t == 0):
self.letterbox.stash()
fut = AsyncFuture()
fut.setResult(None)
return fut
else:
self.__letterboxFuture = AsyncFuture()
self.letterboxIval = Sequence(Parallel(
LerpPosInterval(self.letterboxBottom,
t,
@ -438,9 +503,11 @@ class Transitions:
),
),
Func(self.letterbox.stash),
Func(self.__finishLetterbox),
Func(messenger.send,'letterboxOff'),
name = self.letterboxTaskName,
)
if finishIval:
self.letterboxIval.append(finishIval)
self.letterboxIval.start()
return self.__letterboxFuture

View File

@ -418,7 +418,7 @@ mark_as_advanced(ANDROID_NDK_HOME ANDROID_ABI ANDROID_STL
#
# Is Python installed, and should Python interfaces be generated?
set(WANT_PYTHON_VERSION "2.7"
set(WANT_PYTHON_VERSION ""
CACHE STRING "Which Python version to seek out for building Panda3D against.")
find_package(PythonInterp ${WANT_PYTHON_VERSION} QUIET)

View File

@ -180,10 +180,15 @@ check_cxx_compiler_flag(-msse2 HAVE_SSE2)
#$[cdefine __USE_LARGEFILE64]
# Set LINK_ALL_STATIC if we're building everything as static libraries.
# Also set the library type used for "modules" appropriately.
if(BUILD_SHARED_LIBS)
set(LINK_ALL_STATIC OFF)
set(MODULE_TYPE "MODULE"
CACHE INTERNAL "" FORCE)
else()
set(LINK_ALL_STATIC ON)
set(MODULE_TYPE "STATIC"
CACHE INTERNAL "" FORCE)
endif()
# Now go through all the packages and report whether we have them.

View File

@ -233,9 +233,6 @@
to compile them out. */
#cmakedefine NOTIFY_DEBUG
/* Define if we are linking PANDAPHYSX in with PANDA. */
#cmakedefine LINK_IN_PHYSX
/* The compiled-in character(s) to expect to separate different
components of a path list (e.g. $PRC_PATH). */
#define DEFAULT_PATHSEP "@DEFAULT_PATHSEP@"

View File

@ -1,27 +1,3 @@
# First, dtoolconfig:
set(DTOOLCONFIG_LINK_TARGETS p3prc p3dconfig p3interrogatedb)
add_metalib(p3dtoolconfig dtoolconfig.cxx COMPONENTS ${DTOOLCONFIG_LINK_TARGETS})
install(TARGETS p3dtoolconfig DESTINATION lib)
# Next, panda3d.interrogatedb:
if(BUILD_SHARED_LIBS)
set(libtype MODULE)
else()
set(libtype STATIC)
endif()
if(HAVE_PYTHON)
add_library(interrogatedb ${libtype} pydtool.cxx)
target_use_packages(interrogatedb PYTHON)
target_link_libraries(interrogatedb p3dtoolconfig)
set_target_properties(interrogatedb PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
PREFIX ""
OUTPUT_NAME "interrogatedb"
)
install(TARGETS interrogatedb DESTINATION "${PYTHON_ARCH_INSTALL_DIR}/panda3d")
endif()

View File

@ -224,12 +224,24 @@ substitute_decl(CPPDeclaration::SubstDecl &subst,
bool any_changed = false;
for (size_t i = 0; i < _elements.size(); ++i) {
CPPInstance *elem_rep =
_elements[i]->substitute_decl(subst, current_scope, global_scope)
->as_instance();
// We don't just do substitute_decl on the instance, which could lead to
// an infinite recursion.
CPPInstance *element = _elements[i];
CPPExpression *value = element->_initializer->
substitute_decl(subst, current_scope, global_scope)->as_expression();
if (elem_rep != _elements[i]) {
rep->_elements[i] = elem_rep;
if (is_scoped()) {
// For a strong enum, we consider the elements to be of this type.
if (value != element->_initializer) {
rep->_elements[i] = new CPPInstance(rep, element->_ident);
rep->_elements[i]->_initializer = value;
any_changed = true;
}
} else if (value != element->_initializer ||
rep->get_underlying_type() != get_underlying_type()) {
// In an unscoped enum, the elements are integers.
rep->_elements[i] = new CPPInstance(rep->get_underlying_type(), element->_ident);
rep->_elements[i]->_initializer = value;
any_changed = true;
}
}

View File

@ -81,7 +81,7 @@ as_integer() const {
case RT_pointer:
// We don't mind if this loses precision.
return (int)reinterpret_cast<long>(_u._pointer);
return (int)(intptr_t)(_u._pointer);
default:
cerr << "Invalid type\n";
@ -104,7 +104,7 @@ as_real() const {
case RT_pointer:
// We don't mind if this loses precision.
return (double)reinterpret_cast<long>(_u._pointer);
return (double)(uintptr_t)(_u._pointer);
default:
cerr << "Invalid type\n";
@ -120,10 +120,10 @@ void *CPPExpression::Result::
as_pointer() const {
switch (_type) {
case RT_integer:
return reinterpret_cast<void*>((long)_u._integer);
return (void *)(intptr_t)_u._integer;
case RT_real:
return reinterpret_cast<void*>((long)_u._real);
return (void *)(uintptr_t)_u._real;
case RT_pointer:
return _u._pointer;

View File

@ -1,4 +1,10 @@
configure_file(pandaVersion.h.in pandaVersion.h)
configure_file(checkPandaVersion.h.in checkPandaVersion.h)
configure_file(checkPandaVersion.cxx.in checkPandaVersion.cxx)
set(P3DTOOLBASE_HEADERS
${CMAKE_CURRENT_BINARY_DIR}/checkPandaVersion.h
${CMAKE_CURRENT_BINARY_DIR}/pandaVersion.h
addHash.I addHash.h
atomicAdjust.h
atomicAdjustDummyImpl.h atomicAdjustDummyImpl.I
@ -38,6 +44,7 @@ set(P3DTOOLBASE_HEADERS
)
set(P3DTOOLBASE_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/checkPandaVersion.cxx
addHash.cxx
atomicAdjustDummyImpl.cxx
atomicAdjustI386Impl.cxx
@ -74,6 +81,8 @@ add_component_library(p3dtoolbase SYMBOL BUILDING_DTOOL_DTOOLBASE
# The extensions need py_panda.h and extension.h from interrogatedb
target_include_directories(p3dtoolbase PUBLIC
$<TARGET_PROPERTY:p3interrogatedb,INTERFACE_INCLUDE_DIRECTORIES>)
# Help other libraries find the autogenerated version headers
target_include_directories(p3dtoolbase PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
target_use_packages(p3dtoolbase THREADS EIGEN)
target_interrogate(p3dtoolbase ${P3DTOOLBASE_SOURCES} EXTENSIONS ${P3DTOOLBASE_IGATEEXT})

View File

@ -18,4 +18,4 @@
#include "dtoolbase.h"
EXPCL_DTOOL_DTOOLUTIL int @PANDA_VERSION_SYMBOL@ = 0;
EXPCL_DTOOL_DTOOLBASE int @PANDA_VERSION_SYMBOL@ = 0;

View File

@ -0,0 +1,64 @@
/* Filename: checkPandaVersion.h
* Created by: drose (26Jan05)
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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."
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*******************************************************************
* Generated automatically by CMake.
***************************** DO NOT EDIT *************************/
/* Include this file in code that compiles with Panda to guarantee
that it is linking with the same version of the Panda DLL's that it
was compiled with. */
/* We guarantee this by defining an external symbol which is based on
the version number. If that symbol is defined, then our DLL's
(probably) match. Otherwise, we must be running with the wrong
DLL; but the system linker will prevent the DLL from loading with
an undefined symbol. */
#ifndef CHECKPANDAVERSION_H
#define CHECKPANDAVERSION_H
#include "dtoolbase.h"
extern EXPCL_DTOOL_DTOOLBASE int @PANDA_VERSION_SYMBOL@;
/* Just declaring the symbol isn't good enough. We need to force the
compiler and linker to preserve the external reference long enough
to end up in the output DLL. Therefore, we have to reference that
symbol somehow.
Forcing the compiler to include a reference in its output object
file is easy enough: just define a function that makes use of it
in some way. The problem is the linker, which will enforce the
C++ One-Definition Rule and get upset about said definition
appearing in multiple places in the program. We can appease the
linker by forcing the compiler to emit a weak symbol. Many
compilers have syntax to request this explicitly, but since it
varies from compiler to compiler, that wouldn't be very portable.
Fortunately, the C++ ODR itself has some exceptions, where a
definition can occur in multiple translation units *if and only if*
it's the same definition each time. In these cases, the compiler
must emit a weak symbol, because the ODR does not guarantee that
the same definition isn't repeated in any other translation units.
One such exception is template instantiation, which we use thus: */
template<typename T>
class CheckPandaVersion {
public:
int check() { return @PANDA_VERSION_SYMBOL@; }
};
template class CheckPandaVersion<void>;
#endif

View File

@ -122,6 +122,11 @@ typedef ios::seekdir ios_seekdir;
// Apple has an outdated libstdc++. Not all is lost, though, as we can fill
// in some important missing functions.
#if defined(__GLIBCXX__) && __GLIBCXX__ <= 20070719
#include <tr1/tuple>
using std::tr1::tuple;
using std::tr1::tie;
typedef decltype(nullptr) nullptr_t;
template<class T> struct remove_reference {typedef T type;};

View File

@ -1,10 +1,4 @@
configure_file(pandaVersion.h.in pandaVersion.h)
configure_file(checkPandaVersion.h.in checkPandaVersion.h)
configure_file(checkPandaVersion.cxx.in checkPandaVersion.cxx)
set(P3DTOOLUTIL_HEADERS
${CMAKE_CURRENT_BINARY_DIR}/checkPandaVersion.h
${CMAKE_CURRENT_BINARY_DIR}/pandaVersion.h
config_dtoolutil.h
dSearchPath.I dSearchPath.h
executionEnvironment.I executionEnvironment.h filename.I
@ -40,7 +34,6 @@ if(APPLE)
endif()
set(P3DTOOLUTIL_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/checkPandaVersion.cxx
config_dtoolutil.cxx
dSearchPath.cxx
executionEnvironment.cxx filename.cxx
@ -76,7 +69,6 @@ composite_sources(p3dtoolutil P3DTOOLUTIL_SOURCES)
add_component_library(p3dtoolutil SYMBOL BUILDING_DTOOL_DTOOLUTIL
${P3DTOOLUTIL_HEADERS} ${P3DTOOLUTIL_SOURCES})
set_target_properties(p3dtoolutil PROPERTIES COMPILE_FLAGS ${P3DTOOLUTIL_EXTRA_FLAGS})
target_include_directories(p3dtoolutil PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
# The extensions need py_panda.h and extension.h from interrogatedb
target_include_directories(p3dtoolutil PUBLIC
$<TARGET_PROPERTY:p3interrogatedb,INTERFACE_INCLUDE_DIRECTORIES>)

View File

@ -1,39 +0,0 @@
/* Filename: checkPandaVersion.h
* Created by: drose (26Jan05)
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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."
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*******************************************************************
* Generated automatically by CMake.
***************************** DO NOT EDIT *************************/
/* Include this file in code that compiles with Panda to guarantee
that it is linking with the same version of the Panda DLL's that it
was compiled with. You should include it in one .cxx file only. */
/* We guarantee this by defining an external symbol which is based on
the version number. If that symbol is defined, then our DLL's
(probably) match. Otherwise, we must be running with the wrong
DLL; but the system linker will prevent the DLL from loading with
an undefined symbol. */
#include "dtoolbase.h"
extern EXPCL_DTOOL_DTOOLUTIL int @PANDA_VERSION_SYMBOL@;
#ifndef WIN32
/* For Windows, exporting the symbol from the DLL is sufficient; the
DLL will not load unless all expected public symbols are defined.
Other systems may not mind if the symbol is absent unless we
explictly write code that references it. */
static int check_panda_version = @PANDA_VERSION_SYMBOL@;
#endif

View File

@ -27,24 +27,53 @@ set(P3INTERROGATEDB_SOURCES
py_panda.cxx
py_wrappers.cxx)
composite_sources(p3interrogatedb P3INTERROGATEDB_SOURCES)
set(P3INTERROGATEDB_IGATE
interrogate_interface.h
interrogate_request.h
)
set(P3INTERROGATEDB_IGATE_SOURCES
config_interrogatedb.cxx
indexRemapper.cxx
interrogateComponent.cxx interrogateDatabase.cxx
interrogateElement.cxx interrogateFunction.cxx
interrogateFunctionWrapper.cxx
interrogateMakeSeq.cxx
interrogateManifest.cxx
interrogateType.cxx interrogate_datafile.cxx
interrogate_interface.cxx interrogate_request.cxx)
composite_sources(p3interrogatedb P3INTERROGATEDB_SOURCES)
add_component_library(p3interrogatedb SYMBOL SYMBOL BUILDING_INTERROGATEDB
${P3INTERROGATEDB_HEADERS} ${P3INTERROGATEDB_SOURCES})
target_link_libraries(p3interrogatedb p3dconfig)
target_use_packages(p3interrogatedb PYTHON)
target_interrogate(p3interrogatedb ${P3INTERROGATEDB_IGATE_SOURCES})
install(TARGETS p3interrogatedb DESTINATION lib)
install(FILES ${P3INTERROGATEDB_HEADERS} DESTINATION include/panda3d)
# ALSO: This has an Interrogate binding! Take care of that if we want it.
# Note we don't use the regular Interrogate macros; this has some custom flags
# that would make it not worthwhile.
if(NOT HAVE_PYTHON OR NOT INTERROGATE_PYTHON_INTERFACE)
return()
endif()
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/interrogatedb_module.cxx"
COMMAND interrogate
-D EXPCL_INTERROGATEDB=
-nodb -python -promiscuous
-module panda3d.interrogatedb
-library interrogatedb
-string -true-names -do-module
-srcdir "${CMAKE_CURRENT_SOURCE_DIR}"
-oc "${CMAKE_CURRENT_BINARY_DIR}/interrogatedb_module.cxx"
${P3INTERROGATEDB_IGATE}
DEPENDS interrogate ${P3INTERROGATEDB_IGATE}
COMMENT "Interrogating interrogatedb"
)
add_library(interrogatedb ${MODULE_TYPE}
"${CMAKE_CURRENT_BINARY_DIR}/interrogatedb_module.cxx")
target_use_packages(interrogatedb PYTHON)
target_link_libraries(interrogatedb p3dtoolconfig)
set_target_properties(interrogatedb PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/panda3d"
PREFIX ""
OUTPUT_NAME "interrogatedb"
)
install(TARGETS interrogatedb DESTINATION "${PYTHON_ARCH_INSTALL_DIR}/panda3d")

View File

@ -368,7 +368,7 @@ SectionGroup "Python support"
SetOutPath $INSTDIR\pandac\input
File /r "${BUILT}\pandac\input\*"
SetOutPath $INSTDIR\Pmw
File /r /x CVS "${BUILT}\Pmw\*"
File /nonfatal /r /x CVS "${BUILT}\Pmw\*"
!ifdef REGVIEW
SetRegView ${REGVIEW}

View File

@ -3668,6 +3668,7 @@ if (not RUNTIME):
OPTS=['DIR:panda/src/putil', 'ZLIB', 'PYTHON']
IGATEFILES=GetDirectoryContents('panda/src/putil', ["*.h", "*_composite*.cxx"])
IGATEFILES.remove("test_bam.h")
IGATEFILES.remove("config_util.h")
TargetAdd('libp3putil.in', opts=OPTS, input=IGATEFILES)
TargetAdd('libp3putil.in', opts=['IMOD:panda3d.core', 'ILIB:libp3putil', 'SRCDIR:panda/src/putil'])
TargetAdd('libp3putil_igate.obj', input='libp3putil.in', opts=["DEPENDENCYONLY"])
@ -3794,6 +3795,7 @@ if (not RUNTIME):
OPTS=['DIR:panda/src/pstatclient', 'PYTHON']
IGATEFILES=GetDirectoryContents('panda/src/pstatclient', ["*.h", "*_composite*.cxx"])
IGATEFILES.remove("config_pstats.h")
TargetAdd('libp3pstatclient.in', opts=OPTS, input=IGATEFILES)
TargetAdd('libp3pstatclient.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pstatclient', 'SRCDIR:panda/src/pstatclient'])
TargetAdd('libp3pstatclient_igate.obj', input='libp3pstatclient.in', opts=["DEPENDENCYONLY"])
@ -6110,9 +6112,9 @@ if not PkgSkip("PANDATOOL"):
TargetAdd('pfm-trans.exe', opts=['ADVAPI'])
TargetAdd('pfm-bba_pfmBba.obj', opts=OPTS, input='pfmBba.cxx')
TargetAdd('pfm-bba_config_pfm.obj', opts=OPTS, input='config_pfm.cxx')
TargetAdd('pfm-bba_config_pfmprogs.obj', opts=OPTS, input='config_pfmprogs.cxx')
TargetAdd('pfm-bba.exe', input='pfm-bba_pfmBba.obj')
TargetAdd('pfm-bba.exe', input='pfm-bba_config_pfm.obj')
TargetAdd('pfm-bba.exe', input='pfm-bba_config_pfmprogs.obj')
TargetAdd('pfm-bba.exe', input='libp3progbase.lib')
TargetAdd('pfm-bba.exe', input='libp3pandatoolbase.lib')
TargetAdd('pfm-bba.exe', input=COMMON_PANDA_LIBS)

View File

@ -1228,7 +1228,7 @@
<File RelativePath="..\panda\src\putil\pta_double.h"></File>
<File RelativePath="..\panda\src\putil\copyOnWritePointer.cxx"></File>
<File RelativePath="..\panda\src\putil\bitMask.cxx"></File>
<File RelativePath="..\panda\src\putil\config_util.h"></File>
<File RelativePath="..\panda\src\putil\config_putil.h"></File>
<File RelativePath="..\panda\src\putil\clockObject.h"></File>
<File RelativePath="..\panda\src\putil\lineStream.h"></File>
<File RelativePath="..\panda\src\putil\datagramInputFile.cxx"></File>
@ -1307,7 +1307,7 @@
<File RelativePath="..\panda\src\putil\bamCacheRecord.I"></File>
<File RelativePath="..\panda\src\putil\animInterface.cxx"></File>
<File RelativePath="..\panda\src\putil\lineStreamBuf.h"></File>
<File RelativePath="..\panda\src\putil\config_util.cxx"></File>
<File RelativePath="..\panda\src\putil\config_putil.cxx"></File>
<File RelativePath="..\panda\src\putil\cachedTypedWritableReferenceCount.cxx"></File>
<File RelativePath="..\panda\src\putil\pythonCallbackObject.cxx"></File>
<File RelativePath="..\panda\src\putil\test_linestream.cxx"></File>
@ -2322,8 +2322,8 @@
<File RelativePath="..\panda\src\pstatclient\pStatCollectorForward.h"></File>
<File RelativePath="..\panda\src\pstatclient\pStatClientControlMessage.h"></File>
<File RelativePath="..\panda\src\pstatclient\pStatServerControlMessage.h"></File>
<File RelativePath="..\panda\src\pstatclient\config_pstats.h"></File>
<File RelativePath="..\panda\src\pstatclient\config_pstats.cxx"></File>
<File RelativePath="..\panda\src\pstatclient\config_pstatclient.h"></File>
<File RelativePath="..\panda\src\pstatclient\config_pstatclient.cxx"></File>
<File RelativePath="..\panda\src\pstatclient\pStatClient.cxx"></File>
<File RelativePath="..\panda\src\pstatclient\pStatFrameData.I"></File>
<File RelativePath="..\panda\src\pstatclient\test_client.cxx"></File>

View File

@ -11,14 +11,6 @@ if(HAVE_FREETYPE)
list(APPEND PANDA_LINK_TARGETS p3pnmtext)
endif()
if(LINK_IN_PHYSX)
add_definitions(-DBUILDING_PANDAPHYSX)
set(PANDA_LINK_TARGETS
${PANDA_LINK_TARGETS}
p3physx
)
endif()
add_metalib(panda panda.cxx COMPONENTS ${PANDA_LINK_TARGETS})
set_target_properties(panda PROPERTIES DEFINE_SYMBOL BUILDING_LIBPANDA)

View File

@ -11,7 +11,7 @@
#include "config_display.h"
#include "config_pgraph.h"
#ifdef DO_PSTATS
#include "config_pstats.h"
#include "config_pstatclient.h"
#endif
// By including checkPandaVersion.h, we guarantee that runtime attempts to

View File

@ -12,7 +12,7 @@
*/
#include "config_android.h"
#include "config_util.h"
#include "config_putil.h"
#include "virtualFileMountAndroidAsset.h"
#include "virtualFileSystem.h"
#include "filename.h"

View File

@ -18,7 +18,7 @@
#include "nullAudioManager.h"
#include "windowsRegistry.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "load_dso.h"
#ifdef WIN32

View File

@ -20,7 +20,7 @@
// Panda headers.
#include "config_audio.h"
#include "config_util.h"
#include "config_putil.h"
#include "fmodAudioManager.h"
#include "fmodAudioSound.h"
#include "filename.h"

View File

@ -21,7 +21,7 @@
#include "milesAudioStream.h"
#include "globalMilesManager.h"
#include "config_audio.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "virtualFileSystem.h"
#include "nullAudioSound.h"

View File

@ -14,7 +14,7 @@
// Panda headers.
#include "config_audio.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "config_openalAudio.h"
#include "openalAudioManager.h"

View File

@ -1052,7 +1052,7 @@ BulletPersistentManifold *BulletWorld::
get_manifold(int idx) const {
LightMutexHolder holder(get_global_lock());
nassertr(idx < get_num_manifolds(), NULL);
nassertr(idx < _dispatcher->getNumManifolds(), NULL);
btPersistentManifold *ptr = _dispatcher->getManifoldByIndexInternal(idx);
return (ptr) ? new BulletPersistentManifold(ptr) : NULL;
@ -1186,7 +1186,12 @@ tick_callback(btDynamicsWorld *world, btScalar timestep) {
CallbackObject *obj = w->_tick_callback_obj;
if (obj) {
BulletTickCallbackData cbdata(timestep);
// Release the global lock that we are holding during the tick callback
// and allow interactions with bullet world in the user callback
get_global_lock().release();
obj->do_callback(&cbdata);
// Acquire the global lock again and protect the execution
get_global_lock().acquire();
}
}

View File

@ -16,7 +16,7 @@
#include "config_collada.h"
#include "sceneGraphReducer.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "bamCacheRecord.h"
static PT(PandaNode)

View File

@ -19,7 +19,7 @@
#include "config_display.h"
#include "typeRegistry.h"
#include "pset.h"
#include "config_util.h"
#include "config_putil.h"
#include <algorithm>

View File

@ -58,7 +58,7 @@
#include "colorScaleAttrib.h"
#include "clipPlaneAttrib.h"
#include "fogAttrib.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include <algorithm>
#include <limits.h>

View File

@ -17,7 +17,7 @@
#include "pandabase.h"
#include "pStatTimer.h"
#include "pStatCollector.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "timerQueryContext.h"
class Thread;

View File

@ -426,6 +426,23 @@ get_max_updates_per_second() const {
return _max_updates_per_second;
}
/**
* Specifies the Content-Type header, useful for applications that require
* different types of content, such as JSON.
*/
INLINE void HTTPChannel::
set_content_type(string content_type) {
_content_type = content_type;
}
/**
* Returns the value of the Content-Type header.
*/
INLINE string HTTPChannel::
get_content_type() const {
return _content_type;
}
/**
* This may be called immediately after a call to get_document() or some
* related function to specify the expected size of the document we are

View File

@ -100,6 +100,7 @@ HTTPChannel(HTTPClient *client) :
_response_type = RT_none;
_http_version = _client->get_http_version();
_http_version_string = _client->get_http_version_string();
_content_type = "application/x-www-form-urlencoded";
_state = S_new;
_done_state = S_new;
_started_download = false;
@ -3624,7 +3625,7 @@ make_header() {
if (!_body.empty()) {
stream
<< "Content-Type: application/x-www-form-urlencoded\r\n"
<< "Content-Type: " << _content_type << "\r\n"
<< "Content-Length: " << _body.length() << "\r\n";
}

View File

@ -143,6 +143,9 @@ PUBLISHED:
INLINE void set_max_updates_per_second(double max_updates_per_second);
INLINE double get_max_updates_per_second() const;
INLINE void set_content_type(string content_type);
INLINE string get_content_type() const;
INLINE void set_expected_file_size(size_t file_size);
streamsize get_file_size() const;
INLINE bool is_file_size_known() const;
@ -336,6 +339,7 @@ private:
string request_path;
string _header;
string _body;
string _content_type;
bool _want_ssl;
bool _proxy_serves_document;
bool _proxy_tunnel_now;

View File

@ -18,7 +18,7 @@
#include "eggComment.h"
#include "eggPoolUniquifier.h"
#include "config_egg.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "string_utils.h"
#include "dSearchPath.h"

View File

@ -16,7 +16,7 @@
#include "config_egg2pg.h"
#include "sceneGraphReducer.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "bamCacheRecord.h"
static PT(PandaNode)

View File

@ -17,7 +17,7 @@
#include "modelRoot.h"
#include "sceneGraphReducer.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
/**
* A convenience function; converts the indicated scene graph to an egg file

View File

@ -119,6 +119,7 @@ protected:
double _wake_time;
int _sort;
int _priority;
unsigned int _implicit_sort;
State _state;
Thread *_servicing_thread;

View File

@ -51,7 +51,8 @@ AsyncTaskChain(AsyncTaskManager *manager, const string &name) :
_needs_cleanup(false),
_current_frame(0),
_time_in_frame(0.0),
_block_till_next_frame(false)
_block_till_next_frame(false),
_next_implicit_sort(0)
{
}
@ -418,6 +419,9 @@ do_add(AsyncTask *task) {
task->_start_time = now;
task->_start_frame = _manager->_clock->get_frame_count();
// Remember the order in which tasks were added to the chain.
task->_implicit_sort = _next_implicit_sort++;
_manager->add_task_by_name(task);
if (task->has_delay()) {

View File

@ -146,7 +146,12 @@ protected:
if (a->get_priority() != b->get_priority()) {
return a->get_priority() < b->get_priority();
}
return a->get_start_time() > b->get_start_time();
if (a->get_start_time() != b->get_start_time()) {
return a->get_start_time() > b->get_start_time();
}
// Failing any other ordering criteria, we sort the tasks based on the
// order in which they were added to the task chain.
return a->_implicit_sort > b->_implicit_sort;
}
};
@ -186,6 +191,8 @@ protected:
double _time_in_frame;
bool _block_till_next_frame;
unsigned int _next_implicit_sort;
static PStatCollector _task_pcollector;
static PStatCollector _wait_pcollector;

View File

@ -94,6 +94,9 @@ PythonTask::
PyErr_Restore(_exception, _exc_value, _exc_traceback);
PyErr_Print();
PyErr_Restore(nullptr, nullptr, nullptr);
_exception = nullptr;
_exc_value = nullptr;
_exc_traceback = nullptr;
}
#endif

View File

@ -14,7 +14,7 @@
* get_supports_cg_profile)
*/
#include "config_util.h"
#include "config_putil.h"
#include "displayRegion.h"
#include "renderBuffer.h"
#include "geom.h"
@ -12647,7 +12647,7 @@ upload_texture_image(CLP(TextureContext) *gtc, bool needs_reload,
int depth = tex->get_expected_mipmap_z_size(mipmap_bias);
// Determine the number of images to upload.
int num_levels = 1;
int num_levels = mipmap_bias + 1;
if (uses_mipmaps) {
num_levels = tex->get_expected_num_mipmap_levels();
}

View File

@ -13,7 +13,7 @@
#include "animateVerticesRequest.h"
#include "bufferContext.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_gobj.h"
#include "geom.h"
#include "geomCacheEntry.h"

View File

@ -19,7 +19,7 @@
#include "shader.h"
#include "preparedGraphicsObjects.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "bamCache.h"
#include "string_utils.h"

View File

@ -16,7 +16,7 @@
#include "pandabase.h"
#include "texture.h"
#include "config_gobj.h"
#include "config_util.h"
#include "config_putil.h"
#include "texturePool.h"
#include "textureContext.h"
#include "bamCache.h"

View File

@ -15,7 +15,7 @@
#include "texturePool.h"
#include "config_gobj.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "string_utils.h"
#include "virtualFileSystem.h"

View File

@ -31,7 +31,7 @@
#include "throw_event.h"
#include "pnmImage.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "pset.h"
#include "pmutex.h"

View File

@ -14,7 +14,7 @@
#include "movieTypeRegistry.h"
#include "string_utils.h"
#include "config_movies.h"
#include "config_util.h"
#include "config_putil.h"
#include "load_dso.h"
MovieTypeRegistry *MovieTypeRegistry::_global_ptr = NULL;

View File

@ -36,7 +36,7 @@
#include "throw_event.h"
#include "pnmImage.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
#include "pset.h"
#include "pmutex.h"

View File

@ -16,7 +16,7 @@
#include "bam.h"
#include "bamCacheRecord.h"
#include "config_util.h"
#include "config_putil.h"
#include "bamReader.h"
#include "bamWriter.h"
#include "filename.h"

View File

@ -19,7 +19,7 @@
#include "modelLoadRequest.h"
#include "modelSaveRequest.h"
#include "config_express.h"
#include "config_util.h"
#include "config_putil.h"
#include "virtualFileSystem.h"
#include "filename.h"
#include "load_dso.h"

View File

@ -12,7 +12,7 @@
*/
#include "shaderPool.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "virtualFileSystem.h"
#include "loader.h"

View File

@ -14,7 +14,7 @@
#include "physxEnums.h"
#include "string_utils.h"
#include "config_util.h"
#include "config_putil.h"
ostream &
operator << (ostream &out, PhysxEnums::PhysxUpAxis axis) {

View File

@ -16,7 +16,7 @@
#ifdef HAVE_FREETYPE
#include "config_pnmtext.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "virtualFileSystem.h"
#include "nurbsCurveEvaluator.h"

View File

@ -1,5 +1,5 @@
set(P3PSTATCLIENT_HEADERS
config_pstats.h pStatClient.I pStatClient.h
config_pstatclient.h pStatClient.I pStatClient.h
pStatClientImpl.I pStatClientImpl.h
pStatClientVersion.I
pStatClientVersion.h pStatClientControlMessage.h
@ -10,7 +10,7 @@ set(P3PSTATCLIENT_HEADERS
pStatTimer.I pStatTimer.h)
set(P3PSTATCLIENT_SOURCES
config_pstats.cxx pStatClient.cxx pStatClientImpl.cxx
config_pstatclient.cxx pStatClient.cxx pStatClientImpl.cxx
pStatClientVersion.cxx
pStatClientControlMessage.cxx
pStatCollector.cxx
@ -28,3 +28,4 @@ target_interrogate(p3pstatclient ALL)
install(TARGETS p3pstatclient DESTINATION lib)
install(FILES ${P3PSTATCLIENT_HEADERS} DESTINATION include/panda3d)
install(FILES config_pstats.h DESTINATION include/panda3d)

View File

@ -6,12 +6,12 @@
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file config_pstats.cxx
* @file config_pstatclient.cxx
* @author drose
* @date 2000-07-09
*/
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "dconfig.h"
@ -19,10 +19,10 @@
#error Buildsystem error: BUILDING_PANDA_PSTATCLIENT not defined
#endif
ConfigureDef(config_pstats);
ConfigureDef(config_pstatclient);
NotifyCategoryDef(pstats, "");
ConfigureFn(config_pstats) {
ConfigureFn(config_pstatclient) {
init_libpstatclient();
}

View File

@ -0,0 +1,50 @@
/**
* 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."
*
* @file config_pstatclient.h
* @author drose
* @date 2000-07-09
*/
#ifndef CONFIG_PSTATS_H
#define CONFIG_PSTATS_H
#include "pandabase.h"
#include "notifyCategoryProxy.h"
#include "dconfig.h"
#include "configVariableString.h"
#include "configVariableInt.h"
#include "configVariableDouble.h"
#include "configVariableBool.h"
// Configure variables for pstats package.
ConfigureDecl(config_pstatclient, EXPCL_PANDA_PSTATCLIENT, EXPTP_PANDA_PSTATCLIENT);
NotifyCategoryDecl(pstats, EXPCL_PANDA_PSTATCLIENT, EXPTP_PANDA_PSTATCLIENT);
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableString pstats_name;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_max_rate;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_threaded_write;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableInt pstats_max_queue_size;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_tcp_ratio;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableString pstats_host;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableInt pstats_port;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_target_frame_rate;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_gpu_timing;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_scroll_mode;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_history;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_average_time;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_mem_other;
extern EXPCL_PANDA_PSTATCLIENT void init_libpstatclient();
#endif

View File

@ -1,50 +1,2 @@
/**
* 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."
*
* @file config_pstats.h
* @author drose
* @date 2000-07-09
*/
#ifndef CONFIG_PSTATS_H
#define CONFIG_PSTATS_H
#include "pandabase.h"
#include "notifyCategoryProxy.h"
#include "dconfig.h"
#include "configVariableString.h"
#include "configVariableInt.h"
#include "configVariableDouble.h"
#include "configVariableBool.h"
// Configure variables for pstats package.
ConfigureDecl(config_pstats, EXPCL_PANDA_PSTATCLIENT, EXPTP_PANDA_PSTATCLIENT);
NotifyCategoryDecl(pstats, EXPCL_PANDA_PSTATCLIENT, EXPTP_PANDA_PSTATCLIENT);
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableString pstats_name;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_max_rate;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_threaded_write;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableInt pstats_max_queue_size;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_tcp_ratio;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableString pstats_host;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableInt pstats_port;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_target_frame_rate;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_gpu_timing;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_scroll_mode;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_history;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableDouble pstats_average_time;
extern EXPCL_PANDA_PSTATCLIENT ConfigVariableBool pstats_mem_other;
extern EXPCL_PANDA_PSTATCLIENT void init_libpstatclient();
#endif
// This file to remain during the whole 1.10.x cycle; remove after that.
#error config_pstats.h has been renamed to config_pstatclient.h - please update your project.

View File

@ -1,5 +1,5 @@
#include "config_pstats.cxx"
#include "config_pstatclient.cxx"
#include "pStatClient.cxx"
#include "pStatClientImpl.cxx"
#include "pStatClientVersion.cxx"

View File

@ -21,7 +21,7 @@
#include "pStatServerControlMessage.h"
#include "pStatCollector.h"
#include "pStatThread.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "pStatProperties.h"
#include "thread.h"
#include "clockObject.h"

View File

@ -11,7 +11,7 @@
* @date 2000-07-09
*/
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "pStatClientControlMessage.h"
#include "pStatClientVersion.h"

View File

@ -21,7 +21,7 @@
#include "pStatServerControlMessage.h"
#include "pStatCollector.h"
#include "pStatThread.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "pStatProperties.h"
#include "cmath.h"

View File

@ -13,7 +13,7 @@
#include "pStatFrameData.h"
#include "pStatClientVersion.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "datagram.h"
#include "datagramIterator.h"

View File

@ -14,7 +14,7 @@
#include "pStatProperties.h"
#include "pStatCollectorDef.h"
#include "pStatClient.h"
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "configVariableBool.h"
#include "configVariableColor.h"
#include "configVariableDouble.h"

View File

@ -11,7 +11,7 @@
* @date 2000-07-09
*/
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "pStatServerControlMessage.h"
#include "datagram.h"

View File

@ -11,7 +11,7 @@
* @date 2000-07-09
*/
#include "config_pstats.h"
#include "config_pstatclient.h"
#include "pStatClient.h"
#include "pStatCollector.h"
#include "thread.h"

View File

@ -23,7 +23,7 @@ set(P3PUTIL_HEADERS
copyOnWriteObject.h copyOnWriteObject.I
copyOnWritePointer.h copyOnWritePointer.I
compareTo.I compareTo.h
config_util.N config_util.h configurable.h
config_putil.N config_putil.h configurable.h
cPointerCallbackObject.h cPointerCallbackObject.I
datagramBuffer.I datagramBuffer.h
datagramInputFile.I datagramInputFile.h
@ -83,7 +83,7 @@ set(P3PUTIL_SOURCES
colorSpace.cxx
copyOnWriteObject.cxx
copyOnWritePointer.cxx
config_util.cxx configurable.cxx
config_putil.cxx configurable.cxx
cPointerCallbackObject.cxx
datagramBuffer.cxx
datagramInputFile.cxx datagramOutputFile.cxx
@ -131,6 +131,7 @@ target_interrogate(p3putil ALL EXTENSIONS ${P3PUTIL_IGATEEXT})
install(TARGETS p3putil DESTINATION lib)
install(FILES ${P3PUTIL_HEADERS} DESTINATION include/panda3d)
install(FILES config_util.h DESTINATION include/panda3d)
#begin test_bin_target
#define TARGET test_bamRead

View File

@ -13,7 +13,7 @@
#include "autoTextureScale.h"
#include "string_utils.h"
#include "config_util.h"
#include "config_putil.h"
ostream &
operator << (ostream &out, AutoTextureScale ats) {

View File

@ -18,7 +18,7 @@
#include "hashVal.h"
#include "datagramInputFile.h"
#include "datagramOutputFile.h"
#include "config_util.h"
#include "config_putil.h"
#include "bam.h"
#include "typeRegistry.h"
#include "string_utils.h"

View File

@ -14,7 +14,7 @@
#include "bamCacheIndex.h"
#include "bamReader.h"
#include "bamWriter.h"
#include "config_util.h" // util_cat
#include "config_putil.h" // util_cat
#include "indent.h"
#include <algorithm>

View File

@ -17,7 +17,7 @@
#include "virtualFileSystem.h"
#include "virtualFile.h"
#include "indent.h"
#include "config_util.h" // util_cat
#include "config_putil.h" // util_cat
TypeHandle BamCacheRecord::_type_handle;

View File

@ -13,7 +13,7 @@
#include "bamEnums.h"
#include "string_utils.h"
#include "config_util.h"
#include "config_putil.h"
ostream &
operator << (ostream &out, BamEnums::BamEndian be) {

View File

@ -17,7 +17,7 @@
#include "bam.h"
#include "bamReader.h"
#include "datagramIterator.h"
#include "config_util.h"
#include "config_putil.h"
#include "pipelineCyclerBase.h"
TypeHandle BamReaderAuxData::_type_handle;

View File

@ -12,7 +12,7 @@
*/
#include "bamReader_ext.h"
#include "config_util.h"
#include "config_putil.h"
#include "pythonThread.h"
#ifdef HAVE_PYTHON

View File

@ -15,7 +15,7 @@
#include "pnotify.h"
#include "typedWritable.h"
#include "config_util.h"
#include "config_putil.h"
#include "bam.h"
#include "bamWriter.h"
#include "bamReader.h"
@ -94,6 +94,10 @@ BamWriter::
for (si = _state_map.begin(); si != _state_map.end(); ++si) {
TypedWritable *object = (TypedWritable *)(*si).first;
object->remove_bam_writer(this);
if ((*si).second._refcount != nullptr) {
unref_delete((*si).second._refcount);
}
}
}
@ -529,6 +533,9 @@ object_destructs(TypedWritable *object) {
// we're in trouble when we do write it out.
nassertv(!(*si).second._written_seq.is_initial());
// This cannot be called if we are still holding a reference to it.
nassertv((*si).second._refcount == nullptr);
int object_id = (*si).second._object_id;
_freed_object_ids.push_back(object_id);
@ -606,8 +613,10 @@ enqueue_object(const TypedWritable *object) {
// No, it hasn't, so assign it the next number in sequence arbitrarily.
object_id = _next_object_id;
bool inserted =
_state_map.insert(StateMap::value_type(object, StoreState(_next_object_id))).second;
StateMap::iterator si;
bool inserted;
tie(si, inserted) =
_state_map.insert(StateMap::value_type(object, StoreState(_next_object_id)));
nassertr(inserted, false);
// Store ourselves on the TypedWritable so that we get notified when it
@ -615,6 +624,14 @@ enqueue_object(const TypedWritable *object) {
(const_cast<TypedWritable*>(object))->add_bam_writer(this);
_next_object_id++;
// Increase the reference count if this inherits from ReferenceCount,
// until we get a chance to write this object for the first time.
const ReferenceCount *rc = ((TypedWritable *)object)->as_reference_count();
if (rc != nullptr) {
rc->ref();
(*si).second._refcount = rc;
}
} else {
// Yes, it has; get the object ID.
object_id = (*si).second._object_id;
@ -703,6 +720,15 @@ flush_queue() {
(*si).second._written_seq = _writing_seq;
(*si).second._modified = object->get_bam_modified();
// Now release any reference we hold to it, so that it may destruct.
const ReferenceCount *rc = (*si).second._refcount;
if (rc != nullptr) {
// We need to assign this pointer to null before deleting the object,
// since that may end up calling object_destructs.
(*si).second._refcount = nullptr;
unref_delete(rc);
}
} else {
// On subsequent times when we write a particular object, we write
// simply TypeHandle::none(), followed by the object ID. The occurrence

View File

@ -140,8 +140,9 @@ private:
int _object_id;
UpdateSeq _written_seq;
UpdateSeq _modified;
const ReferenceCount *_refcount;
StoreState(int object_id) : _object_id(object_id) {}
StoreState(int object_id) : _object_id(object_id), _refcount(nullptr) {}
};
typedef phash_map<const TypedWritable *, StoreState, pointer_hash> StateMap;
StateMap _state_map;

View File

@ -12,7 +12,7 @@
*/
#include "buttonRegistry.h"
#include "config_util.h"
#include "config_putil.h"
#include <stdio.h>

View File

@ -12,7 +12,7 @@
*/
#include "clockObject.h"
#include "config_util.h"
#include "config_putil.h"
#include "configVariableEnum.h"
#include "string_utils.h"
#include "thread.h"

View File

@ -12,7 +12,7 @@
*/
#include "colorSpace.h"
#include "config_util.h"
#include "config_putil.h"
#include "configVariableEnum.h"
#include "string_utils.h"

View File

@ -6,12 +6,12 @@
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file config_util.cxx
* @file config_putil.cxx
* @author cary
* @date 2000-01-04
*/
#include "config_util.h"
#include "config_putil.h"
#include "animInterface.h"
#include "bamCacheIndex.h"
#include "bamCacheRecord.h"
@ -51,7 +51,7 @@
#error Buildsystem error: BUILDING_PANDA_PUTIL not defined
#endif
ConfigureDef(config_util);
ConfigureDef(config_putil);
NotifyCategoryDef(util, "");
NotifyCategoryDef(bam, util_cat);
@ -88,7 +88,7 @@ ConfigVariableEnum<BamEnums::BamTextureMode> bam_texture_mode
PRC_DESC("Set this to specify how textures should be written into Bam files."
"See the panda source or documentation for available options."));
ConfigureFn(config_util) {
ConfigureFn(config_putil) {
init_libputil();
}

View File

@ -0,0 +1,55 @@
/**
* 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."
*
* @file config_putil.h
* @author cary
* @date 2000-01-04
*/
#ifndef __CONFIG_UTIL_H__
#define __CONFIG_UTIL_H__
#include "pandabase.h"
#include "notifyCategoryProxy.h"
#include "configVariableSearchPath.h"
#include "configVariableEnum.h"
#include "configVariableDouble.h"
#include "bamEnums.h"
#include "dconfig.h"
class DSearchPath;
ConfigureDecl(config_putil, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
NotifyCategoryDecl(util, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
NotifyCategoryDecl(bam, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
// Actually, we can't determine this config variable the normal way, because
// we must be able to access it at static init time. Instead of declaring it
// a global constant, we'll make it a member of MemoryUsage. extern
// EXPCL_PANDA_PUTIL const bool track_memory_usage;
extern EXPCL_PANDA_PUTIL ConfigVariableInt bam_version;
extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEnums::BamEndian> bam_endian;
extern EXPCL_PANDA_PUTIL ConfigVariableBool bam_stdfloat_double;
extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEnums::BamTextureMode> bam_texture_mode;
BEGIN_PUBLISH
EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_model_path();
EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_plugin_path();
END_PUBLISH
extern ConfigVariableDouble sleep_precision;
extern EXPCL_PANDA_PUTIL ConfigVariableBool preload_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool preload_simple_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool compressed_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool cache_check_timestamps;
extern EXPCL_PANDA_PUTIL void init_libputil();
#endif /* __CONFIG_UTIL_H__ */

View File

@ -1,55 +1,2 @@
/**
* 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."
*
* @file config_util.h
* @author cary
* @date 2000-01-04
*/
#ifndef __CONFIG_UTIL_H__
#define __CONFIG_UTIL_H__
#include "pandabase.h"
#include "notifyCategoryProxy.h"
#include "configVariableSearchPath.h"
#include "configVariableEnum.h"
#include "configVariableDouble.h"
#include "bamEnums.h"
#include "dconfig.h"
class DSearchPath;
ConfigureDecl(config_util, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
NotifyCategoryDecl(util, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
NotifyCategoryDecl(bam, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
// Actually, we can't determine this config variable the normal way, because
// we must be able to access it at static init time. Instead of declaring it
// a global constant, we'll make it a member of MemoryUsage. extern
// EXPCL_PANDA_PUTIL const bool track_memory_usage;
extern EXPCL_PANDA_PUTIL ConfigVariableInt bam_version;
extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEnums::BamEndian> bam_endian;
extern EXPCL_PANDA_PUTIL ConfigVariableBool bam_stdfloat_double;
extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEnums::BamTextureMode> bam_texture_mode;
BEGIN_PUBLISH
EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_model_path();
EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_plugin_path();
END_PUBLISH
extern ConfigVariableDouble sleep_precision;
extern EXPCL_PANDA_PUTIL ConfigVariableBool preload_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool preload_simple_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool compressed_textures;
extern EXPCL_PANDA_PUTIL ConfigVariableBool cache_check_timestamps;
extern EXPCL_PANDA_PUTIL void init_libputil();
#endif /* __CONFIG_UTIL_H__ */
// This file to remain during the whole 1.10.x cycle; remove after that.
#error config_util.h has been renamed to config_putil.h - please update your project.

View File

@ -12,7 +12,7 @@
*/
#include "copyOnWritePointer.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_pipeline.h"
#ifdef COW_THREADED

View File

@ -16,7 +16,7 @@
#include "numeric_types.h"
#include "datagramIterator.h"
#include "profileTimer.h"
#include "config_util.h"
#include "config_putil.h"
#include "config_express.h"
#include "virtualFileSystem.h"
#include "streamReader.h"

View File

@ -21,7 +21,7 @@
#include "fileReference.h"
#include "virtualFile.h"
#include "virtualFileSystem.h"
#include "config_util.h"
#include "config_putil.h"
/**
* This class can be used to write a binary file that consists of an arbitrary

View File

@ -13,7 +13,7 @@
#include "factoryBase.h"
#include "indent.h"
#include "config_util.h"
#include "config_putil.h"
/**
*

View File

@ -12,7 +12,7 @@
*/
#include "globalPointerRegistry.h"
#include "config_util.h"
#include "config_putil.h"
// In general, we use the util_cat->info() syntax in this file (instead of
// util_cat.info()), because much of this work is done at static init time,

View File

@ -84,7 +84,7 @@ DEFINE_KEYBD_BUTTON_HANDLE(rmeta)
/**
* This is intended to be called only once, by the static initialization
* performed in config_util.cxx.
* performed in config_putil.cxx.
*/
void KeyboardButton::
init_keyboard_buttons() {

View File

@ -16,7 +16,7 @@
#include "configVariableManager.h"
#include "virtualFileSystem.h"
#include "config_express.h"
#include "config_util.h"
#include "config_putil.h"
#include "hashVal.h"
/**

View File

@ -12,7 +12,7 @@
*/
#include "loaderOptions.h"
#include "config_util.h"
#include "config_putil.h"
#include "indent.h"
/**
@ -25,7 +25,7 @@ LoaderOptions(int flags) :
_texture_num_views(0),
_auto_texture_scale(ATS_unspecified)
{
// Shadowing the variables in config_util for static init ordering issues.
// Shadowing the variables in config_putil for static init ordering issues.
static ConfigVariableBool *preload_textures;
static ConfigVariableBool *preload_simple_textures;
static ConfigVariableBool *compressed_textures;

View File

@ -129,7 +129,7 @@ is_mouse_button(ButtonHandle button) {
/**
* This is intended to be called only once, by the static initialization
* performed in config_util.cxx.
* performed in config_putil.cxx.
*/
void MouseButton::
init_mouse_buttons() {

View File

@ -17,7 +17,7 @@
#include "callbackObject.cxx"
#include "clockObject.cxx"
#include "colorSpace.cxx"
#include "config_util.cxx"
#include "config_putil.cxx"
#include "configurable.cxx"
#include "copyOnWriteObject.cxx"
#include "copyOnWritePointer.cxx"

View File

@ -18,7 +18,7 @@
#include "py_panda.h"
#include "pythonThread.h"
#include "callbackData.h"
#include "config_util.h"
#include "config_putil.h"
TypeHandle PythonCallbackObject::_type_handle;

View File

@ -16,7 +16,7 @@
#include "pandabase.h"
#include "pvector.h"
#include "config_util.h"
#include "config_putil.h"
/**
* Entry in the SimpleHashMap.

View File

@ -12,7 +12,7 @@
*/
#include "filename.h"
#include "config_util.h"
#include "config_putil.h"
#include "dSearchPath.h"

View File

@ -16,7 +16,7 @@
#include "pandabase.h"
#include "pvector.h"
#include "config_util.h"
#include "config_putil.h"
#include "weakPointerTo.h"
/**

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