mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 08:15:18 -04:00
Merge branch 'release/1.10.x'
This commit is contained in:
commit
1b21e604f0
2
direct/src/dist/commands.py
vendored
2
direct/src/dist/commands.py
vendored
@ -116,7 +116,7 @@ from _frozen_importlib import _imp, FrozenImporter
|
|||||||
|
|
||||||
sys.frozen = True
|
sys.frozen = True
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32' and sys.version_info < (3, 10):
|
||||||
# Make sure the preferred encoding is something we actually support.
|
# Make sure the preferred encoding is something we actually support.
|
||||||
import _bootlocale
|
import _bootlocale
|
||||||
enc = _bootlocale.getpreferredencoding().lower()
|
enc = _bootlocale.getpreferredencoding().lower()
|
||||||
|
@ -20,6 +20,7 @@ from panda3d.core import LVecBase4, LPoint2
|
|||||||
from panda3d.core import AuxBitplaneAttrib
|
from panda3d.core import AuxBitplaneAttrib
|
||||||
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 direct.task.TaskManagerGlobal import taskMgr
|
from direct.task.TaskManagerGlobal import taskMgr
|
||||||
|
|
||||||
@ -52,6 +53,7 @@ o_color = lerp(o_color, k_cartooncolor, cartoon_thresh);
|
|||||||
SSAO_BODY = """//Cg
|
SSAO_BODY = """//Cg
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoord : TEXCOORD0,
|
out float2 l_texcoord : TEXCOORD0,
|
||||||
out float2 l_texcoordD : TEXCOORD1,
|
out float2 l_texcoordD : TEXCOORD1,
|
||||||
@ -61,9 +63,9 @@ void vshader(float4 vtx_position : POSITION,
|
|||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position = mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
l_texcoord = vtx_position.xz;
|
l_texcoord = vtx_texcoord;
|
||||||
l_texcoordD = (vtx_position.xz * texpad_depth.xy) + texpad_depth.xy;
|
l_texcoordD = vtx_texcoord * texpad_depth.xy * 2;
|
||||||
l_texcoordN = (vtx_position.xz * texpad_normal.xy) + texpad_normal.xy;
|
l_texcoordN = vtx_texcoord * texpad_normal.xy * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
float3 sphere[16] = float3[](float3(0.53812504, 0.18565957, -0.43192),float3(0.13790712, 0.24864247, 0.44301823),float3(0.33715037, 0.56794053, -0.005789503),float3(-0.6999805, -0.04511441, -0.0019965635),float3(0.06896307, -0.15983082, -0.85477847),float3(0.056099437, 0.006954967, -0.1843352),float3(-0.014653638, 0.14027752, 0.0762037),float3(0.010019933, -0.1924225, -0.034443386),float3(-0.35775623, -0.5301969, -0.43581226),float3(-0.3169221, 0.106360726, 0.015860917),float3(0.010350345, -0.58698344, 0.0046293875),float3(-0.08972908, -0.49408212, 0.3287904),float3(0.7119986, -0.0154690035, -0.09183723),float3(-0.053382345, 0.059675813, -0.5411899),float3(0.035267662, -0.063188605, 0.54602677),float3(-0.47761092, 0.2847911, -0.0271716));
|
float3 sphere[16] = float3[](float3(0.53812504, 0.18565957, -0.43192),float3(0.13790712, 0.24864247, 0.44301823),float3(0.33715037, 0.56794053, -0.005789503),float3(-0.6999805, -0.04511441, -0.0019965635),float3(0.06896307, -0.15983082, -0.85477847),float3(0.056099437, 0.006954967, -0.1843352),float3(-0.014653638, 0.14027752, 0.0762037),float3(0.010019933, -0.1924225, -0.034443386),float3(-0.35775623, -0.5301969, -0.43581226),float3(-0.3169221, 0.106360726, 0.015860917),float3(0.010350345, -0.58698344, 0.0046293875),float3(-0.08972908, -0.49408212, 0.3287904),float3(0.7119986, -0.0154690035, -0.09183723),float3(-0.053382345, 0.059675813, -0.5411899),float3(0.035267662, -0.063188605, 0.54602677),float3(-0.47761092, 0.2847911, -0.0271716));
|
||||||
@ -292,11 +294,19 @@ class CommonFilters:
|
|||||||
text += "{\n"
|
text += "{\n"
|
||||||
text += " l_position = mul(mat_modelproj, vtx_position);\n"
|
text += " l_position = mul(mat_modelproj, vtx_position);\n"
|
||||||
|
|
||||||
|
# The card is oriented differently depending on our chosen
|
||||||
|
# coordinate system. We could just use vtx_texcoord, but this
|
||||||
|
# saves on an additional variable.
|
||||||
|
if getDefaultCoordinateSystem() in (CS_zup_right, CS_zup_left):
|
||||||
|
pos = "vtx_position.xz"
|
||||||
|
else:
|
||||||
|
pos = "vtx_position.xy"
|
||||||
|
|
||||||
for texcoord, padTex in texcoordPadding.items():
|
for texcoord, padTex in texcoordPadding.items():
|
||||||
if padTex is None:
|
if padTex is None:
|
||||||
text += " %s = vtx_position.xz * float2(0.5, 0.5) + float2(0.5, 0.5);\n" % (texcoord)
|
text += " %s = %s * float2(0.5, 0.5) + float2(0.5, 0.5);\n" % (texcoord, pos)
|
||||||
else:
|
else:
|
||||||
text += " %s = (vtx_position.xz * texpad_tx%s.xy) + texpad_tx%s.xy;\n" % (texcoord, padTex, padTex)
|
text += " %s = (%s * texpad_tx%s.xy) + texpad_tx%s.xy;\n" % (texcoord, pos, padTex, padTex)
|
||||||
|
|
||||||
if "HalfPixelShift" in configuration:
|
if "HalfPixelShift" in configuration:
|
||||||
text += " %s += texpix_tx%s.xy * 0.5;\n" % (texcoord, padTex)
|
text += " %s += texpix_tx%s.xy * 0.5;\n" % (texcoord, padTex)
|
||||||
|
@ -32,6 +32,7 @@ BLOOM_I = """
|
|||||||
|
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoordNW : TEXCOORD0,
|
out float2 l_texcoordNW : TEXCOORD0,
|
||||||
out float2 l_texcoordNE : TEXCOORD1,
|
out float2 l_texcoordNE : TEXCOORD1,
|
||||||
@ -42,7 +43,7 @@ void vshader(float4 vtx_position : POSITION,
|
|||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position=mul(mat_modelproj, vtx_position);
|
||||||
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
float2 c = vtx_texcoord * texpad_src.xy * 2;
|
||||||
float4 offs = texpix_src * 0.5;
|
float4 offs = texpix_src * 0.5;
|
||||||
l_texcoordNW = c + float2( offs.x, -offs.y);
|
l_texcoordNW = c + float2( offs.x, -offs.y);
|
||||||
l_texcoordNE = c + float2( offs.x, offs.y);
|
l_texcoordNE = c + float2( offs.x, offs.y);
|
||||||
|
@ -2,6 +2,7 @@ BLOOM_X = """
|
|||||||
//Cg
|
//Cg
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float4 l_texcoord0 : TEXCOORD0,
|
out float4 l_texcoord0 : TEXCOORD0,
|
||||||
out float4 l_texcoord1 : TEXCOORD1,
|
out float4 l_texcoord1 : TEXCOORD1,
|
||||||
@ -10,8 +11,8 @@ void vshader(float4 vtx_position : POSITION,
|
|||||||
uniform float4 texpix_src,
|
uniform float4 texpix_src,
|
||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
float2 c = vtx_texcoord * texpad_src.xy * 2;
|
||||||
float offset = texpix_src.x;
|
float offset = texpix_src.x;
|
||||||
float pad = texpad_src.x * 2;
|
float pad = texpad_src.x * 2;
|
||||||
l_texcoord0 = float4(min(c.x-offset* -4, pad), min(c.x-offset* -3, pad), min(c.x-offset* -2, pad), c.y);
|
l_texcoord0 = float4(min(c.x-offset* -4, pad), min(c.x-offset* -3, pad), min(c.x-offset* -2, pad), c.y);
|
||||||
|
@ -2,6 +2,7 @@ BLOOM_Y = """
|
|||||||
//Cg
|
//Cg
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float4 l_texcoord0 : TEXCOORD0,
|
out float4 l_texcoord0 : TEXCOORD0,
|
||||||
out float4 l_texcoord1 : TEXCOORD1,
|
out float4 l_texcoord1 : TEXCOORD1,
|
||||||
@ -11,7 +12,7 @@ void vshader(float4 vtx_position : POSITION,
|
|||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position=mul(mat_modelproj, vtx_position);
|
||||||
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
float2 c = vtx_texcoord * texpad_src.xy * 2;
|
||||||
float offset = texpix_src.y;
|
float offset = texpix_src.y;
|
||||||
float pad = texpad_src.y * 2;
|
float pad = texpad_src.y * 2;
|
||||||
l_texcoord0 = float4(min(c.y-offset* -4, pad), min(c.y-offset* -3, pad), min(c.y-offset* -2, pad), c.x);
|
l_texcoord0 = float4(min(c.y-offset* -4, pad), min(c.y-offset* -3, pad), min(c.y-offset* -2, pad), c.x);
|
||||||
|
@ -4,14 +4,14 @@ BLUR_X = """
|
|||||||
//Cg profile arbvp1 arbfp1
|
//Cg profile arbvp1 arbfp1
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
float2 vtx_texcoord0 : TEXCOORD0,
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoord0 : TEXCOORD0,
|
out float2 l_texcoord0 : TEXCOORD0,
|
||||||
uniform float4 texpad_src,
|
uniform float4 texpad_src,
|
||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
l_texcoord0 = (vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
l_texcoord0 = vtx_texcoord * texpad_src.xy * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,14 +4,14 @@ BLUR_Y = """
|
|||||||
//Cg profile arbvp1 arbfp1
|
//Cg profile arbvp1 arbfp1
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
float2 vtx_texcoord0 : TEXCOORD0,
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoord0 : TEXCOORD0,
|
out float2 l_texcoord0 : TEXCOORD0,
|
||||||
uniform float4 texpad_src,
|
uniform float4 texpad_src,
|
||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
l_texcoord0 = (vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
l_texcoord0 = vtx_texcoord * texpad_src.xy * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,13 +3,14 @@ COPY = """
|
|||||||
|
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoord : TEXCOORD0,
|
out float2 l_texcoord : TEXCOORD0,
|
||||||
uniform float4 texpad_src,
|
uniform float4 texpad_src,
|
||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
l_texcoord = (vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
l_texcoord = vtx_texcoord * texpad_src.xy * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fshader(float2 l_texcoord : TEXCOORD0,
|
void fshader(float2 l_texcoord : TEXCOORD0,
|
||||||
|
@ -2,6 +2,7 @@ DOWN_4 = """
|
|||||||
//Cg
|
//Cg
|
||||||
|
|
||||||
void vshader(float4 vtx_position : POSITION,
|
void vshader(float4 vtx_position : POSITION,
|
||||||
|
float2 vtx_texcoord : TEXCOORD0,
|
||||||
out float4 l_position : POSITION,
|
out float4 l_position : POSITION,
|
||||||
out float2 l_texcoordNW : TEXCOORD0,
|
out float2 l_texcoordNW : TEXCOORD0,
|
||||||
out float2 l_texcoordNE : TEXCOORD1,
|
out float2 l_texcoordNE : TEXCOORD1,
|
||||||
@ -11,8 +12,8 @@ void vshader(float4 vtx_position : POSITION,
|
|||||||
uniform float4 texpix_src,
|
uniform float4 texpix_src,
|
||||||
uniform float4x4 mat_modelproj)
|
uniform float4x4 mat_modelproj)
|
||||||
{
|
{
|
||||||
l_position=mul(mat_modelproj, vtx_position);
|
l_position = mul(mat_modelproj, vtx_position);
|
||||||
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
|
float2 c = vtx_texcoord * texpad_src.xy * 2;
|
||||||
l_texcoordNW = c + float2( texpix_src.x, -texpix_src.y);
|
l_texcoordNW = c + float2( texpix_src.x, -texpix_src.y);
|
||||||
l_texcoordNE = c + float2( texpix_src.x, texpix_src.y);
|
l_texcoordNE = c + float2( texpix_src.x, texpix_src.y);
|
||||||
l_texcoordSW = c + float2(-texpix_src.x, -texpix_src.y);
|
l_texcoordSW = c + float2(-texpix_src.x, -texpix_src.y);
|
||||||
|
@ -240,10 +240,10 @@ class BufferViewer(DirectObject):
|
|||||||
offsetx = (ringoffset[ring]*2.0) / float(sizex)
|
offsetx = (ringoffset[ring]*2.0) / float(sizex)
|
||||||
offsety = (ringoffset[ring]*2.0) / float(sizey)
|
offsety = (ringoffset[ring]*2.0) / float(sizey)
|
||||||
bright = ringbright[ring]
|
bright = ringbright[ring]
|
||||||
vwriter.addData3f(-1-offsetx, 0, -1-offsety)
|
vwriter.addData3f(Vec3.rfu(-1 - offsetx, 0, -1 - offsety))
|
||||||
vwriter.addData3f(1+offsetx, 0, -1-offsety)
|
vwriter.addData3f(Vec3.rfu( 1 + offsetx, 0, -1 - offsety))
|
||||||
vwriter.addData3f(1+offsetx, 0, 1+offsety)
|
vwriter.addData3f(Vec3.rfu( 1 + offsetx, 0, 1 + offsety))
|
||||||
vwriter.addData3f(-1-offsetx, 0, 1+offsety)
|
vwriter.addData3f(Vec3.rfu(-1 - offsetx, 0, 1 + offsety))
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
|
@ -1409,6 +1409,10 @@ cull_and_draw_together(GraphicsEngine::Windows wlist,
|
|||||||
GraphicsOutput *win = wlist[wi];
|
GraphicsOutput *win = wlist[wi];
|
||||||
if (win->is_active() && win->get_gsg()->is_active()) {
|
if (win->is_active() && win->get_gsg()->is_active()) {
|
||||||
if (win->flip_ready()) {
|
if (win->flip_ready()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Flipping window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
PStatTimer timer(_flip_pcollector, current_thread);
|
PStatTimer timer(_flip_pcollector, current_thread);
|
||||||
win->begin_flip();
|
win->begin_flip();
|
||||||
win->end_flip();
|
win->end_flip();
|
||||||
@ -1423,6 +1427,11 @@ cull_and_draw_together(GraphicsEngine::Windows wlist,
|
|||||||
gsg->pop_group_marker();
|
gsg->pop_group_marker();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Culling and drawing window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
int num_display_regions = win->get_num_active_display_regions();
|
int num_display_regions = win->get_num_active_display_regions();
|
||||||
for (int i = 0; i < num_display_regions; i++) {
|
for (int i = 0; i < num_display_regions; i++) {
|
||||||
PT(DisplayRegion) dr = win->get_active_display_region(i);
|
PT(DisplayRegion) dr = win->get_active_display_region(i);
|
||||||
@ -1434,6 +1443,10 @@ cull_and_draw_together(GraphicsEngine::Windows wlist,
|
|||||||
|
|
||||||
if (_auto_flip) {
|
if (_auto_flip) {
|
||||||
if (win->flip_ready()) {
|
if (win->flip_ready()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Flipping window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
PStatTimer timer(_flip_pcollector, current_thread);
|
PStatTimer timer(_flip_pcollector, current_thread);
|
||||||
win->begin_flip();
|
win->begin_flip();
|
||||||
win->end_flip();
|
win->end_flip();
|
||||||
@ -1530,6 +1543,11 @@ cull_to_bins(GraphicsEngine::Windows wlist, Thread *current_thread) {
|
|||||||
for (size_t wi = 0; wi < wlist_size; ++wi) {
|
for (size_t wi = 0; wi < wlist_size; ++wi) {
|
||||||
GraphicsOutput *win = wlist[wi];
|
GraphicsOutput *win = wlist[wi];
|
||||||
if (win->is_active() && win->get_gsg()->is_active()) {
|
if (win->is_active() && win->get_gsg()->is_active()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Culling window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
GraphicsStateGuardian *gsg = win->get_gsg();
|
GraphicsStateGuardian *gsg = win->get_gsg();
|
||||||
PStatTimer timer(win->get_cull_window_pcollector(), current_thread);
|
PStatTimer timer(win->get_cull_window_pcollector(), current_thread);
|
||||||
int num_display_regions = win->get_num_active_display_regions();
|
int num_display_regions = win->get_num_active_display_regions();
|
||||||
@ -1687,6 +1705,10 @@ draw_bins(const GraphicsEngine::Windows &wlist, Thread *current_thread) {
|
|||||||
|
|
||||||
GraphicsOutput *host = win->get_host();
|
GraphicsOutput *host = win->get_host();
|
||||||
if (host->flip_ready()) {
|
if (host->flip_ready()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Flipping window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
PStatTimer timer(_flip_pcollector, current_thread);
|
PStatTimer timer(_flip_pcollector, current_thread);
|
||||||
host->begin_flip();
|
host->begin_flip();
|
||||||
host->end_flip();
|
host->end_flip();
|
||||||
@ -1720,6 +1742,10 @@ draw_bins(const GraphicsEngine::Windows &wlist, Thread *current_thread) {
|
|||||||
|
|
||||||
if (_auto_flip) {
|
if (_auto_flip) {
|
||||||
if (win->flip_ready()) {
|
if (win->flip_ready()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Flipping window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
PStatGPUTimer timer(gsg, _flip_pcollector, current_thread);
|
PStatGPUTimer timer(gsg, _flip_pcollector, current_thread);
|
||||||
win->begin_flip();
|
win->begin_flip();
|
||||||
win->end_flip();
|
win->end_flip();
|
||||||
@ -1790,6 +1816,11 @@ flip_windows(const GraphicsEngine::Windows &wlist, Thread *current_thread) {
|
|||||||
for (i = 0; i < num_windows; ++i) {
|
for (i = 0; i < num_windows; ++i) {
|
||||||
GraphicsOutput *win = wlist[i];
|
GraphicsOutput *win = wlist[i];
|
||||||
if (win->flip_ready()) {
|
if (win->flip_ready()) {
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Flipping window " << win->get_name() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
nassertv(warray_count < num_windows);
|
nassertv(warray_count < num_windows);
|
||||||
warray[warray_count] = win;
|
warray[warray_count] = win;
|
||||||
++warray_count;
|
++warray_count;
|
||||||
@ -2217,6 +2248,11 @@ void GraphicsEngine::
|
|||||||
do_resort_windows() {
|
do_resort_windows() {
|
||||||
_windows_sorted = true;
|
_windows_sorted = true;
|
||||||
|
|
||||||
|
if (display_cat.is_spam()) {
|
||||||
|
display_cat.spam()
|
||||||
|
<< "Re-sorting window list.\n";
|
||||||
|
}
|
||||||
|
|
||||||
_app.resort_windows();
|
_app.resort_windows();
|
||||||
Threads::const_iterator ti;
|
Threads::const_iterator ti;
|
||||||
for (ti = _threads.begin(); ti != _threads.end(); ++ti) {
|
for (ti = _threads.begin(); ti != _threads.end(); ++ti) {
|
||||||
|
@ -247,6 +247,71 @@ WinGraphicsPipe() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (windisplay_cat.is_debug()) {
|
||||||
|
windisplay_cat.debug()
|
||||||
|
<< "Detected display devices:\n";
|
||||||
|
|
||||||
|
DISPLAY_DEVICEA device;
|
||||||
|
device.cb = sizeof(device);
|
||||||
|
for (DWORD devnum = 0; EnumDisplayDevicesA(nullptr, devnum, &device, 0); ++devnum) {
|
||||||
|
std::ostream &out = windisplay_cat.debug();
|
||||||
|
out << " " << device.DeviceName << " [" << device.DeviceString << "]";
|
||||||
|
if (device.StateFlags & DISPLAY_DEVICE_ACTIVE) {
|
||||||
|
out << " (active)";
|
||||||
|
}
|
||||||
|
if (device.StateFlags & DISPLAY_DEVICE_MULTI_DRIVER) {
|
||||||
|
out << " (multi-driver)";
|
||||||
|
}
|
||||||
|
if (device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) {
|
||||||
|
out << " (primary)";
|
||||||
|
}
|
||||||
|
if (device.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) {
|
||||||
|
out << " (mirroring)";
|
||||||
|
}
|
||||||
|
if (device.StateFlags & DISPLAY_DEVICE_REMOVABLE) {
|
||||||
|
out << " (removable)";
|
||||||
|
}
|
||||||
|
out << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
int nmonitor = GetSystemMetrics(SM_CMONITORS);
|
||||||
|
windisplay_cat.debug()
|
||||||
|
<< "Detected " << nmonitor << " monitors, "
|
||||||
|
<< (GetSystemMetrics(SM_SAMEDISPLAYFORMAT) != 0 ? "" : "NOT ")
|
||||||
|
<< "sharing same display format:\n";
|
||||||
|
|
||||||
|
EnumDisplayMonitors(
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
[](HMONITOR monitor, HDC dc, LPRECT rect, LPARAM param) -> BOOL {
|
||||||
|
MONITORINFOEXA info;
|
||||||
|
info.cbSize = sizeof(info);
|
||||||
|
if (GetMonitorInfoA(monitor, &info)) {
|
||||||
|
std::ostream &out = windisplay_cat.debug() << " ";
|
||||||
|
|
||||||
|
DISPLAY_DEVICEA device;
|
||||||
|
device.cb = sizeof(device);
|
||||||
|
device.StateFlags = 0;
|
||||||
|
if (EnumDisplayDevicesA(info.szDevice, 0, &device, 0)) {
|
||||||
|
out << device.DeviceName << " [" << device.DeviceString << "]";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out << info.szDevice << " (device enum failed)";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.dwFlags & MONITORINFOF_PRIMARY) {
|
||||||
|
out << " (primary)";
|
||||||
|
}
|
||||||
|
if (info.rcWork.left != 0 || info.rcWork.top != 0) {
|
||||||
|
out << " (at " << info.rcWork.left << "x" << info.rcWork.top << ")";
|
||||||
|
}
|
||||||
|
out << "\n";
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
},
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_DX9
|
#ifdef HAVE_DX9
|
||||||
// Use D3D to get display info. This is disabled by default as it is slow.
|
// Use D3D to get display info. This is disabled by default as it is slow.
|
||||||
if (request_dxdisplay_information) {
|
if (request_dxdisplay_information) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user