Merge branch 'release/1.10.x'

This commit is contained in:
rdb 2022-10-25 16:38:40 +02:00
commit 9768cbb6c2
9 changed files with 65 additions and 32 deletions

View File

@ -17,7 +17,7 @@ These filters are written in the Cg shading language.
# clunky approach. - Josh # clunky approach. - Josh
from panda3d.core import LVecBase4, LPoint2 from panda3d.core import LVecBase4, LPoint2
from panda3d.core import AuxBitplaneAttrib from panda3d.core import AuxBitplaneAttrib, AntialiasAttrib
from panda3d.core import Texture, Shader, ATSNone from panda3d.core import Texture, Shader, ATSNone
from panda3d.core import FrameBufferProperties from panda3d.core import FrameBufferProperties
from panda3d.core import getDefaultCoordinateSystem, CS_zup_right, CS_zup_left from panda3d.core import getDefaultCoordinateSystem, CS_zup_right, CS_zup_left
@ -189,11 +189,22 @@ class CommonFilters:
fbprops.setSrgbColor(False) fbprops.setSrgbColor(False)
clamping = False clamping = False
if "MSAA" in configuration:
if fbprops is None:
fbprops = FrameBufferProperties()
fbprops.setMultisamples(configuration["MSAA"].samples)
self.finalQuad = self.manager.renderSceneInto(textures = self.textures, auxbits=auxbits, fbprops=fbprops, clamping=clamping) self.finalQuad = self.manager.renderSceneInto(textures = self.textures, auxbits=auxbits, fbprops=fbprops, clamping=clamping)
if self.finalQuad is None: if self.finalQuad is None:
self.cleanup() self.cleanup()
return False return False
if "MSAA" in configuration:
camNode = self.manager.camera.node()
state = camNode.getInitialState()
state.setAttrib(AntialiasAttrib.make(AntialiasAttrib.M_multisample))
camNode.setInitialState(state)
if "BlurSharpen" in configuration: if "BlurSharpen" in configuration:
blur0 = self.textures["blur0"] blur0 = self.textures["blur0"]
blur1 = self.textures["blur1"] blur1 = self.textures["blur1"]
@ -454,6 +465,19 @@ class CommonFilters:
if task is not None: if task is not None:
return task.cont return task.cont
def setMSAA(self, samples):
fullrebuild = "MSAA" not in self.configuration or self.configuration["MSAA"].samples != samples
newconfig = FilterConfig()
newconfig.samples = samples
self.configuration["MSAA"] = newconfig
return self.reconfigure(fullrebuild, "MSAA")
def delMSAA(self):
if "MSAA" in self.configuration:
del self.configuration["MSAA"]
return self.reconfigure(True, "MSAA")
return True
def setCartoonInk(self, separation=1, color=(0, 0, 0, 1)): def setCartoonInk(self, separation=1, color=(0, 0, 0, 1)):
fullrebuild = ("CartoonInk" not in self.configuration) fullrebuild = ("CartoonInk" not in self.configuration)
newconfig = FilterConfig() newconfig = FilterConfig()
@ -679,6 +703,8 @@ class CommonFilters:
return True return True
#snake_case alias: #snake_case alias:
set_msaa = setMSAA
del_msaa = delMSAA
del_cartoon_ink = delCartoonInk del_cartoon_ink = delCartoonInk
set_half_pixel_shift = setHalfPixelShift set_half_pixel_shift = setHalfPixelShift
del_half_pixel_shift = delHalfPixelShift del_half_pixel_shift = delHalfPixelShift

View File

@ -72,10 +72,10 @@ public:
typedef std::map<std::string, CPPManifest *> Manifests; typedef std::map<std::string, CPPManifest *> Manifests;
Manifests _manifests; Manifests _manifests;
typedef pvector<CPPManifest *> ManifestStack; typedef std::vector<CPPManifest *> ManifestStack;
std::map<std::string, ManifestStack> _manifest_stack; std::map<std::string, ManifestStack> _manifest_stack;
pvector<CPPFile::Source> _quote_include_kind; std::vector<CPPFile::Source> _quote_include_kind;
DSearchPath _quote_include_path; DSearchPath _quote_include_path;
DSearchPath _angle_include_path; DSearchPath _angle_include_path;
bool _noangles; bool _noangles;

View File

@ -18,10 +18,7 @@
INLINE BulletAllHitsRayResult BulletAllHitsRayResult:: INLINE BulletAllHitsRayResult BulletAllHitsRayResult::
empty() { empty() {
btVector3 from; return BulletAllHitsRayResult(btVector3(0, 0, 0), btVector3(0, 0, 0), CollideMask::all_on());
btVector3 to;
return BulletAllHitsRayResult(from, to, CollideMask::all_on());
} }
/** /**

View File

@ -26,17 +26,3 @@ INLINE BulletWheelRaycastInfo::
~BulletWheelRaycastInfo() { ~BulletWheelRaycastInfo() {
} }
/**
* Named constructor intended to be used for asserts with have to return a
* concrete value.
*/
INLINE BulletWheel BulletWheel::
empty() {
btWheelInfoConstructionInfo ci {};
btWheelInfo info(ci);
return BulletWheel(info);
}

View File

@ -23,6 +23,19 @@ BulletWheel(btWheelInfo &info) : _info(info) {
} }
/**
* Named constructor intended to be used for asserts with have to return a
* concrete value.
*/
BulletWheel BulletWheel::
empty() {
static btWheelInfoConstructionInfo ci {};
static btWheelInfo info(ci);
return BulletWheel(info);
}
/** /**
* *
*/ */

View File

@ -143,7 +143,7 @@ PUBLISHED:
public: public:
BulletWheel(btWheelInfo &info); BulletWheel(btWheelInfo &info);
INLINE static BulletWheel empty(); static BulletWheel empty();
private: private:
btWheelInfo &_info; btWheelInfo &_info;

View File

@ -60,8 +60,9 @@ LPoint3 btVector3_to_LPoint3(const btVector3 &p) {
*/ */
btMatrix3x3 LMatrix3_to_btMatrix3x3(const LMatrix3 &m) { btMatrix3x3 LMatrix3_to_btMatrix3x3(const LMatrix3 &m) {
LMatrix4 m4(m);
btMatrix3x3 result; btMatrix3x3 result;
result.setFromOpenGLSubMatrix((const btScalar *)m.get_data()); result.setFromOpenGLSubMatrix((const btScalar *)m4.get_data());
return result; return result;
} }
@ -70,11 +71,11 @@ btMatrix3x3 LMatrix3_to_btMatrix3x3(const LMatrix3 &m) {
*/ */
LMatrix3 btMatrix3x3_to_LMatrix3(const btMatrix3x3 &m) { LMatrix3 btMatrix3x3_to_LMatrix3(const btMatrix3x3 &m) {
btScalar cells[9]; btScalar cells[12];
m.getOpenGLSubMatrix(cells); m.getOpenGLSubMatrix(cells);
return LMatrix3((PN_stdfloat)cells[0], (PN_stdfloat)cells[1], (PN_stdfloat)cells[2], return LMatrix3((PN_stdfloat)cells[0], (PN_stdfloat)cells[1], (PN_stdfloat)cells[2],
(PN_stdfloat)cells[3], (PN_stdfloat)cells[4], (PN_stdfloat)cells[5], (PN_stdfloat)cells[4], (PN_stdfloat)cells[5], (PN_stdfloat)cells[6],
(PN_stdfloat)cells[6], (PN_stdfloat)cells[7], (PN_stdfloat)cells[8]); (PN_stdfloat)cells[8], (PN_stdfloat)cells[9], (PN_stdfloat)cells[10]);
} }
/** /**

View File

@ -2005,11 +2005,22 @@ resolve_multisamples() {
} }
} }
#ifndef OPENGLES
if (_have_any_color) {
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
} else {
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
}
#endif
if (do_depth_blit) { if (do_depth_blit) {
glgsg->_glBlitFramebuffer(0, 0, _rb_size_x, _rb_size_y, 0, 0, _rb_size_x, _rb_size_y, glgsg->_glBlitFramebuffer(0, 0, _rb_size_x, _rb_size_y, 0, 0, _rb_size_x, _rb_size_y,
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT,
GL_NEAREST); GL_NEAREST);
} else { }
else if (_have_any_color) {
glgsg->_glBlitFramebuffer(0, 0, _rb_size_x, _rb_size_y, 0, 0, _rb_size_x, _rb_size_y, glgsg->_glBlitFramebuffer(0, 0, _rb_size_x, _rb_size_y, 0, 0, _rb_size_x, _rb_size_y,
GL_COLOR_BUFFER_BIT, GL_COLOR_BUFFER_BIT,
GL_NEAREST); GL_NEAREST);

View File

@ -3261,8 +3261,6 @@ update_cached(bool update_bounds, int pipeline_stage, PandaNode::CDLockedStageRe
off_clip_planes = ClipPlaneAttrib::make(); off_clip_planes = ClipPlaneAttrib::make();
} }
int num_vertices = cdata->_internal_vertices;
// Also get the list of the node's children. When the cdataw destructs, it // Also get the list of the node's children. When the cdataw destructs, it
// will also release the lock, since we've got all the data we need from the // will also release the lock, since we've got all the data we need from the
// node. // node.
@ -3307,6 +3305,7 @@ update_cached(bool update_bounds, int pipeline_stage, PandaNode::CDLockedStageRe
} }
// Now expand those contents to include all of our children. // Now expand those contents to include all of our children.
int child_vertices = 0;
for (int i = 0; i < num_children; ++i) { for (int i = 0; i < num_children; ++i) {
DownConnection &connection = (*down)[i]; DownConnection &connection = (*down)[i];
@ -3402,7 +3401,7 @@ update_cached(bool update_bounds, int pipeline_stage, PandaNode::CDLockedStageRe
nassertr(child_volumes_i < num_children + 1, CDStageWriter(_cycler, pipeline_stage, cdata)); nassertr(child_volumes_i < num_children + 1, CDStageWriter(_cycler, pipeline_stage, cdata));
child_volumes[child_volumes_i++] = child_cdataw->_external_bounds; child_volumes[child_volumes_i++] = child_cdataw->_external_bounds;
} }
num_vertices += child_cdataw->_nested_vertices; child_vertices += child_cdataw->_nested_vertices;
connection._external_bounds = child_cdataw->_external_bounds->as_geometric_bounding_volume(); connection._external_bounds = child_cdataw->_external_bounds->as_geometric_bounding_volume();
} }
@ -3461,7 +3460,7 @@ update_cached(bool update_bounds, int pipeline_stage, PandaNode::CDLockedStageRe
nassertr(child_volumes_i < num_children + 1, CDStageWriter(_cycler, pipeline_stage, cdata)); nassertr(child_volumes_i < num_children + 1, CDStageWriter(_cycler, pipeline_stage, cdata));
child_volumes[child_volumes_i++] = child_cdata->_external_bounds; child_volumes[child_volumes_i++] = child_cdata->_external_bounds;
} }
num_vertices += child_cdata->_nested_vertices; child_vertices += child_cdata->_nested_vertices;
connection._external_bounds = child_cdata->_external_bounds->as_geometric_bounding_volume(); connection._external_bounds = child_cdata->_external_bounds->as_geometric_bounding_volume();
} }
@ -3516,7 +3515,7 @@ update_cached(bool update_bounds, int pipeline_stage, PandaNode::CDLockedStageRe
cdataw->_off_clip_planes = off_clip_planes; cdataw->_off_clip_planes = off_clip_planes;
if (update_bounds) { if (update_bounds) {
cdataw->_nested_vertices = num_vertices; cdataw->_nested_vertices = cdataw->_internal_vertices + child_vertices;
BoundingVolume::BoundsType btype = cdataw->_bounds_type; BoundingVolume::BoundsType btype = cdataw->_bounds_type;
if (btype == BoundingVolume::BT_default) { if (btype == BoundingVolume::BT_default) {