mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
restore verify_window_sizes
This commit is contained in:
parent
b58b1919ae
commit
c1a04c4486
@ -931,11 +931,3 @@ do_determine_display_regions() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsWindow::
|
|
||||||
get_framebuffer_format(PixelBuffer::Type &fb_type, PixelBuffer::Format &fb_format) {
|
|
||||||
display_cat.warning() << "get_framebuffer_format() unimplemented by " << get_type() << endl;
|
|
||||||
|
|
||||||
fb_type = PixelBuffer::T_unsigned_byte;
|
|
||||||
fb_format = PixelBuffer::F_rgb;
|
|
||||||
}
|
|
||||||
|
@ -104,12 +104,12 @@ public:
|
|||||||
bool has_button_event(int device) const;
|
bool has_button_event(int device) const;
|
||||||
ButtonEvent get_button_event(int device);
|
ButtonEvent get_button_event(int device);
|
||||||
|
|
||||||
virtual void get_framebuffer_format(PixelBuffer::Type &fb_type, PixelBuffer::Format &fb_format);
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual int verify_window_sizes(int numsizes, int *dimen);
|
virtual int verify_window_sizes(int numsizes, int *dimen);
|
||||||
|
|
||||||
PT(DisplayRegion) make_scratch_display_region(int x_size, int y_size) const;
|
PT(DisplayRegion) make_scratch_display_region(int x_size, int y_size) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// These are not intended to be called directly by the user.
|
||||||
INLINE void win_display_regions_changed();
|
INLINE void win_display_regions_changed();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -201,6 +201,74 @@ release_gsg() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: wdxGraphicsWindow8::verify_window_sizes
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: Determines which of the indicated window sizes are
|
||||||
|
// supported by available hardware (e.g. in fullscreen
|
||||||
|
// mode).
|
||||||
|
//
|
||||||
|
// On entry, dimen is an array containing contiguous x,y
|
||||||
|
// pairs specifying possible display sizes; it is
|
||||||
|
// numsizes*2 words long. The function will zero out
|
||||||
|
// any invalid x,y size pairs. The return value is the
|
||||||
|
// number of valid sizes that were found.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
int wdxGraphicsWindow8::
|
||||||
|
verify_window_sizes(int numsizes, int *dimen) {
|
||||||
|
// unfortunately this only works AFTER you make the window
|
||||||
|
// initially, so its really mostly useful for resizes only
|
||||||
|
assert(IS_VALID_PTR(_dxgsg));
|
||||||
|
|
||||||
|
int num_valid_modes = 0;
|
||||||
|
|
||||||
|
// not requesting same refresh rate since changing res might not
|
||||||
|
// support same refresh rate at new size
|
||||||
|
|
||||||
|
int *pCurDim = dimen;
|
||||||
|
|
||||||
|
for (int i=0; i < numsizes; i++, pCurDim += 2) {
|
||||||
|
int x_size = pCurDim[0];
|
||||||
|
int y_size = pCurDim[1];
|
||||||
|
|
||||||
|
bool bIsGoodMode = false;
|
||||||
|
bool CouldntFindAnyValidZBuf;
|
||||||
|
D3DFORMAT newPixFmt = D3DFMT_UNKNOWN;
|
||||||
|
|
||||||
|
if (special_check_fullscreen_resolution(x_size, y_size)) {
|
||||||
|
// bypass the test below for certain cards we know have valid modes
|
||||||
|
bIsGoodMode=true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (_dxgsg->scrn.bIsLowVidMemCard) {
|
||||||
|
bIsGoodMode = ((x_size == 640) && (y_size == 480));
|
||||||
|
} else {
|
||||||
|
search_for_valid_displaymode(x_size, y_size, _dxgsg->scrn.PresParams.EnableAutoDepthStencil != false,
|
||||||
|
IS_STENCIL_FORMAT(_dxgsg->scrn.PresParams.AutoDepthStencilFormat),
|
||||||
|
&_dxgsg->scrn.SupportedScreenDepthsMask,
|
||||||
|
&CouldntFindAnyValidZBuf, &newPixFmt);
|
||||||
|
bIsGoodMode = (newPixFmt != D3DFMT_UNKNOWN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bIsGoodMode) {
|
||||||
|
num_valid_modes++;
|
||||||
|
} else {
|
||||||
|
// tell caller the mode is invalid
|
||||||
|
pCurDim[0] = 0;
|
||||||
|
pCurDim[1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wdxdisplay8_cat.is_spam()) {
|
||||||
|
wdxdisplay8_cat.spam()
|
||||||
|
<< "Fullscrn Mode (" << x_size << "," << y_size << ")\t"
|
||||||
|
<< (bIsGoodMode ? "V" : "Inv") <<"alid\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return num_valid_modes;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: wdxGraphicsWindow8::begin_frame
|
// Function: wdxGraphicsWindow8::begin_frame
|
||||||
// Access: Public, Virtual
|
// Access: Public, Virtual
|
||||||
|
@ -45,6 +45,8 @@ public:
|
|||||||
virtual void make_gsg();
|
virtual void make_gsg();
|
||||||
virtual void release_gsg();
|
virtual void release_gsg();
|
||||||
|
|
||||||
|
virtual int verify_window_sizes(int numsizes, int *dimen);
|
||||||
|
|
||||||
virtual bool begin_frame();
|
virtual bool begin_frame();
|
||||||
virtual void end_flip();
|
virtual void end_flip();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user