aignacio_sf преди 19 години
родител
ревизия
ba432d161a

+ 9 - 3
panda/src/display/Sources.pp

@@ -32,7 +32,9 @@
     parasiteBuffer.I parasiteBuffer.h \
     windowProperties.I windowProperties.h \
     renderBuffer.h \
-    stencilRenderStates.h
+    stencilRenderStates.h \
+    displaySearchParameters.h \
+    displayInformation.h    
     
  #define INCLUDED_SOURCES  \
     standardMunger.cxx \
@@ -52,7 +54,9 @@
     parasiteBuffer.cxx \
     windowProperties.cxx \
     lru.cxx \
-    stencilRenderStates.cxx
+    stencilRenderStates.cxx \
+    displaySearchParameters.cxx \
+    displayInformation.cxx    
 
   #define INSTALL_HEADERS \
     standardMunger.I standardMunger.h \
@@ -75,7 +79,9 @@
     parasiteBuffer.I parasiteBuffer.h \
     windowProperties.I windowProperties.h \
     renderBuffer.h \
-    stencilRenderStates.h
+    stencilRenderStates.h \
+    displaySearchParameters.h \
+    displayInformation.h    
 
   #define IGATESCAN all
 

+ 2 - 0
panda/src/display/display_composite2.cxx

@@ -10,3 +10,5 @@
 #include "parasiteBuffer.cxx"
 #include "lru.cxx"
 #include "stencilRenderStates.cxx"
+#include "displaySearchParameters.cxx"
+#include "displayInformation.cxx"

+ 12 - 0
panda/src/display/graphicsPipe.cxx

@@ -43,6 +43,8 @@ GraphicsPipe() :
 
   _display_width = 0;
   _display_height = 0;
+
+  _display_information = new DisplayInformation ( );
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -73,6 +75,7 @@ operator = (const GraphicsPipe &) {
 ////////////////////////////////////////////////////////////////////
 GraphicsPipe::
 ~GraphicsPipe() {
+  delete _display_information;
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -138,3 +141,12 @@ make_output(const string &name,
   return NULL;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsPipe::get_display_information
+//       Access: Published
+//  Description: Gets the pipe's DisplayInformation.
+////////////////////////////////////////////////////////////////////
+DisplayInformation * GraphicsPipe::
+get_display_information() {
+  return _display_information;
+}

+ 5 - 0
panda/src/display/graphicsPipe.h

@@ -25,6 +25,7 @@
 #include "typedReferenceCount.h"
 #include "pointerTo.h"
 #include "pmutex.h"
+#include "displayInformation.h"
 
 class GraphicsOutput;
 class GraphicsWindow;
@@ -96,6 +97,8 @@ PUBLISHED:
   INLINE int get_display_width() const;
   INLINE int get_display_height() const;
 
+  DisplayInformation *get_display_information();
+  
   virtual string get_interface_name() const=0;
 
 public:
@@ -127,6 +130,8 @@ protected:
   int _display_width;
   int _display_height;
   PT(GraphicsDevice) _device;
+  
+  DisplayInformation *_display_information;
 
   static const int strip_properties[];
 

+ 6 - 3
panda/src/windisplay/Sources.pp

@@ -3,19 +3,23 @@
 #define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \
                    dtoolutil:c dtoolbase:c dtool:m
 #define WIN_SYS_LIBS Imm32.lib
+
 #define BUILDING_DLL BUILDING_PANDAWIN
 
+#define USE_PACKAGES dx
+
 #begin lib_target
   #define TARGET windisplay
   #define LOCAL_LIBS \
     display putil
     
-  #define COMBINED_SOURCES $[TARGET]_composite1.cxx 
+  #define COMBINED_SOURCES $[TARGET]_composite1.cxx winDetectDx9.cxx winDetectDx8.cxx winDetectDx7.cxx
 
   #define SOURCES \
      config_windisplay.h \
      winGraphicsPipe.I winGraphicsPipe.h \
-     winGraphicsWindow.I winGraphicsWindow.h
+     winGraphicsWindow.I winGraphicsWindow.h \
+     winDetectDx.h
    
   #define INSTALL_HEADERS \
      config_windisplay.h \
@@ -27,7 +31,6 @@
      config_windisplay.cxx winGraphicsPipe.cxx \
      winGraphicsWindow.cxx
 
-
   #define WIN_SYS_LIBS Imm32.lib winmm.lib kernel32.lib oldnames.lib user32.lib gdi32.lib
 
 #end lib_target

+ 23 - 0
panda/src/windisplay/winGraphicsPipe.cxx

@@ -18,6 +18,7 @@
 
 #include "winGraphicsPipe.h"
 #include "config_windisplay.h"
+#include "displaySearchParameters.h"
 
 TypeHandle WinGraphicsPipe::_type_handle;
 
@@ -39,6 +40,28 @@ WinGraphicsPipe() {
     _pfnTrackMouseEvent = 
       (PFN_TRACKMOUSEEVENT)GetProcAddress(_hUser32, "TrackMouseEvent");
   }
+
+  int dx7_display_information (DisplaySearchParameters &display_search_parameters, DisplayInformation *display_information);
+  int dx8_display_information (DisplaySearchParameters &display_search_parameters, DisplayInformation *display_information);
+  int dx9_display_information (DisplaySearchParameters &display_search_parameters, DisplayInformation *display_information);
+
+  DisplaySearchParameters display_search_parameters;
+
+  // DX7
+  if (dx7_display_information (display_search_parameters, _display_information)) {
+  
+  }
+  
+  // try DX9 first
+  if (dx9_display_information (display_search_parameters, _display_information)) {
+  
+  }
+  else {
+    // DX9 failed, try DX8
+    if (dx8_display_information (display_search_parameters, _display_information)) {
+
+    }
+  }
 }
 
 ////////////////////////////////////////////////////////////////////