historical/toontown-classic.git/panda/include/graphicsThreadingModel.I
2024-01-16 11:20:27 -06:00

151 lines
3.8 KiB
Text

/**
* 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 graphicsThreadingModel.I
* @author drose
* @date 2003-01-27
*/
/**
*
*/
INLINE GraphicsThreadingModel::
GraphicsThreadingModel(const GraphicsThreadingModel &copy) :
_cull_name(copy._cull_name),
_cull_stage(copy._cull_stage),
_draw_name(copy._draw_name),
_draw_stage(copy._draw_stage),
_cull_sorting(copy._cull_sorting)
{
}
/**
*
*/
INLINE void GraphicsThreadingModel::
operator = (const GraphicsThreadingModel &copy) {
_cull_name = copy._cull_name;
_cull_stage = copy._cull_stage;
_draw_name = copy._draw_name;
_draw_stage = copy._draw_stage;
_cull_sorting = copy._cull_sorting;
}
/**
* Returns the name of the thread that will handle culling in this model.
*/
INLINE const std::string &GraphicsThreadingModel::
get_cull_name() const {
return _cull_name;
}
/**
* Changes the name of the thread that will handle culling in this model.
* This won't change any windows that were already created with this model;
* this only has an effect on newly-opened windows.
*/
INLINE void GraphicsThreadingModel::
set_cull_name(const std::string &cull_name) {
_cull_name = cull_name;
update_stages();
}
/**
* Returns the pipeline stage from which the cull thread should access data.
* This will be 0 if the cull is run in the same thread as app, or 1 if it is
* its own thread.
*/
INLINE int GraphicsThreadingModel::
get_cull_stage() const {
return _cull_stage;
}
/**
* Returns the name of the thread that will handle sending the actual graphics
* primitives to the graphics API in this model.
*/
INLINE const std::string &GraphicsThreadingModel::
get_draw_name() const {
return _draw_name;
}
/**
* Changes the name of the thread that will handle drawing in this model.
* This won't change any windows that were already created with this model;
* this only has an effect on newly-opened windows.
*/
INLINE void GraphicsThreadingModel::
set_draw_name(const std::string &draw_name) {
_draw_name = draw_name;
update_stages();
}
/**
* Returns the pipeline stage from which the draw thread should access data.
* This will be the same value as get_cull_stage() if cull and draw are run in
* the same thread, or one more than that value if draw should be in its own
* thread.
*/
INLINE int GraphicsThreadingModel::
get_draw_stage() const {
return _draw_stage;
}
/**
* Returns true if the model involves a separate cull pass, or false if
* culling happens implicitly, at the same time as draw.
*/
INLINE bool GraphicsThreadingModel::
get_cull_sorting() const {
return _cull_sorting;
}
/**
* Changes the flag that indicates whether the threading model involves a
* separate cull pass. This won't change any windows that were already
* created with this model; this only has an effect on newly-opened windows.
*/
INLINE void GraphicsThreadingModel::
set_cull_sorting(bool cull_sorting) {
_cull_sorting = cull_sorting;
update_stages();
}
/**
* Returns true if the threading model is a single-threaded model, or false if
* it involves threads.
*/
INLINE bool GraphicsThreadingModel::
is_single_threaded() const {
return _cull_name.empty() && _draw_name.empty();
}
/**
* Returns true if the threading model is the default, cull-then-draw single-
* threaded model, or false otherwise.
*/
INLINE bool GraphicsThreadingModel::
is_default() const {
return is_single_threaded() && _cull_sorting;
}
/**
*
*/
INLINE void GraphicsThreadingModel::
output(std::ostream &out) const {
out << get_model();
}
INLINE std::ostream &
operator << (std::ostream &out, const GraphicsThreadingModel &threading_model) {
threading_model.output(out);
return out;
}