Browse Source

added fullscreen state

Nicolas Cannasse 8 years ago
parent
commit
4519b46c20
3 changed files with 34 additions and 1 deletions
  1. 13 0
      libs/directx/directx.cpp
  2. 17 0
      libs/directx/dx/Driver.hx
  3. 4 1
      libs/directx/dx/Window.hx

+ 13 - 0
libs/directx/directx.cpp

@@ -373,6 +373,17 @@ HL_PRIM void HL_NAME(generate_mips)( dx_pointer *t ) {
 	driver->context->GenerateMips((ID3D11ShaderResourceView*)t);
 }
 
+HL_PRIM bool HL_NAME(set_fullscreen_state)( bool fs ) {
+	return driver->swapchain->SetFullscreenState(fs,NULL) == S_OK;
+}
+
+HL_PRIM bool HL_NAME(get_fullscreen_state)() {
+	BOOL ret;
+	if( driver->swapchain->GetFullscreenState(&ret,NULL) != S_OK )
+		return false;
+	return ret != 0;
+}
+
 #define _DRIVER _ABSTRACT(dx_driver)
 #define _POINTER _ABSTRACT(dx_pointer)
 #define _RESOURCE _ABSTRACT(dx_resource)
@@ -425,3 +436,5 @@ DEFINE_PRIM(_VOID, vs_set_samplers, _I32 _I32 _REF(_POINTER));
 DEFINE_PRIM(_VOID, ps_set_shader_resources, _I32 _I32 _REF(_POINTER));
 DEFINE_PRIM(_VOID, vs_set_shader_resources, _I32 _I32 _REF(_POINTER));
 DEFINE_PRIM(_VOID, generate_mips, _POINTER);
+DEFINE_PRIM(_BOOL, set_fullscreen_state, _BOOL);
+DEFINE_PRIM(_BOOL, get_fullscreen_state, _NO_ARG);

+ 17 - 0
libs/directx/dx/Driver.hx

@@ -456,6 +456,8 @@ class ShaderResourceViewDesc {
 @:hlNative("directx")
 class Driver {
 
+	public static var fullScreen(get, set) : Bool;
+
 	public static function create( win : Window, format : Format, flags : DriverInitFlags = None ) {
 		return dxCreate(@:privateAccess win.win, format, flags);
 	}
@@ -612,6 +614,21 @@ class Driver {
 	public static function generateMips( res : ShaderResourceView ) {
 	}
 
+	static function get_fullScreen() return getFullscreenState();
+	static function set_fullScreen(b) {
+		if( !setFullscreenState(b) )
+			return false;
+		return b;
+	}
+
+	static function getFullscreenState() {
+		return false;
+	}
+
+	static function setFullscreenState( b : Bool ) {
+		return false;
+	}
+
 	@:hlNative("directx", "create_depth_stencil_state")
 	static function dxCreateDepthStencilState( desc : Dynamic ) : DepthStencilState {
 		return null;

+ 4 - 1
libs/directx/dx/Window.hx

@@ -49,8 +49,11 @@ class Window {
 			if( !fs ) return mode;
 			savedSize = { x : x, y : y, width : width, height : height };
 			winSetFullscreen(win,true);
+			Driver.fullScreen = mode == Fullscreen;
 		} else {
-			if( fs ) return mode;
+			Driver.fullScreen = mode == Fullscreen;
+			if( fs )
+				return mode;
 			winSetFullscreen(win, false);
 			resize(savedSize.width, savedSize.height);
 			setPosition(savedSize.x, savedSize.y);