fixed crashes, added dxgi1.2 stuff
parent
6ebf3633d9
commit
0784e6b637
|
@ -76,6 +76,7 @@ void STDCALL OSInit()
|
|||
GetSystemInfo(&si);
|
||||
|
||||
OSVERSIONINFO osvi;
|
||||
osvi.dwOSVersionInfoSize = sizeof(osvi);
|
||||
GetVersionEx(&osvi);
|
||||
if(osvi.dwMajorVersion > 6 || (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion >= 2))
|
||||
bWindows8 = TRUE;
|
||||
|
|
|
@ -65,8 +65,8 @@ extern ConfigFile *AppConfig;
|
|||
extern OBS *App;
|
||||
extern TCHAR lpAppDataPath[MAX_PATH];
|
||||
|
||||
#define OBS_VERSION 0x000450
|
||||
#define OBS_VERSION_STRING_ANSI "Open Broadcaster Software v0.45a"
|
||||
#define OBS_VERSION 0x000452
|
||||
#define OBS_VERSION_STRING_ANSI "Open Broadcaster Software v0.452a"
|
||||
#define OBS_VERSION_STRING TEXT(OBS_VERSION_STRING_ANSI)
|
||||
|
||||
#define OBS_WINDOW_CLASS TEXT("OBSWindowClass")
|
||||
|
@ -82,6 +82,7 @@ void WINAPI ProcessEvents();
|
|||
inline bool IsWindows8Up()
|
||||
{
|
||||
OSVERSIONINFO osi;
|
||||
osi.dwOSVersionInfoSize = sizeof(osi);
|
||||
GetVersionEx(&osi);
|
||||
|
||||
return (osi.dwMajorVersion > 6 || (osi.dwMajorVersion == 6 && osi.dwMinorVersion >= 2));
|
||||
|
|
|
@ -749,13 +749,15 @@ OBS::OBS()
|
|||
UINT numScenes = scenes->NumElements();
|
||||
if(!numScenes)
|
||||
{
|
||||
scenes->CreateElement(Str("Scene"));
|
||||
XElement *scene = scenes->CreateElement(Str("Scene"));
|
||||
scene->SetString(TEXT("class"), TEXT("Scene"));
|
||||
numScenes++;
|
||||
}
|
||||
|
||||
for(UINT i=0; i<numScenes; i++)
|
||||
{
|
||||
XElement *scene = scenes->GetElementByID(i);
|
||||
scene->SetString(TEXT("class"), TEXT("Scene"));
|
||||
SendMessage(hwndTemp, LB_ADDSTRING, 0, (LPARAM)scene->GetName());
|
||||
}
|
||||
|
||||
|
|
|
@ -384,7 +384,13 @@ LRESULT CALLBACK OBS::ListboxHook(HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
|||
if(numItems)
|
||||
{
|
||||
curClassInfo = App->GetSceneClass(item->GetString(TEXT("class")));
|
||||
if(curClassInfo->configProc)
|
||||
if(!curClassInfo)
|
||||
{
|
||||
curSceneElement->AddString(TEXT("class"), TEXT("Scene"));
|
||||
curClassInfo = App->GetSceneClass(item->GetString(TEXT("class")));
|
||||
}
|
||||
|
||||
if(curClassInfo && curClassInfo->configProc)
|
||||
{
|
||||
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
|
||||
AppendMenu(hMenu, MF_STRING, ID_LISTBOX_CONFIG, Str("Listbox.Config"));
|
||||
|
|
|
@ -0,0 +1,357 @@
|
|||
/***
|
||||
*concurrencysal.h - markers for documenting the concurrent semantics of APIs
|
||||
*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
*
|
||||
*Purpose:
|
||||
* This file contains macros for Concurrency SAL annotations. Definitions
|
||||
* starting with _Internal are low level macros that are subject to change.
|
||||
* Users should not use those low level macros directly.
|
||||
* [ANSI]
|
||||
*
|
||||
* [Public]
|
||||
*
|
||||
****/
|
||||
|
||||
#ifndef CONCURRENCYSAL_H
|
||||
#define CONCURRENCYSAL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus // [
|
||||
extern "C" {
|
||||
#endif // ]
|
||||
|
||||
#if !defined(__midl) && defined(_PREFAST_) && _MSC_VER >= 1000 && !defined(_SDV_) /*IFSTRIP=IGN*/
|
||||
|
||||
__ANNOTATION(SAL_guarded_by(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_write_guarded_by(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_requires_lock_held(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_requires_exclusive_lock_held(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_requires_shared_lock_held(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_requires_lock_not_held(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_requires_no_locks_held(void));
|
||||
__ANNOTATION(SAL_set_lock_count_to_zero(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_set_lock_count_to_one(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_acquires_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_acquires_exclusive_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_acquires_shared_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_releases_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_releases_exclusive_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_releases_shared_lock(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_ignore_lock_match(__deferTypecheck void *));
|
||||
__ANNOTATION(SAL_has_lock_property(__AuToQuOtE __In_impl_ char *));
|
||||
__ANNOTATION(SAL_has_lock_level(__AuToQuOtE __In_impl_ char *));
|
||||
__ANNOTATION(SAL_lock_level_order(__deferTypecheck void *, __deferTypecheck void *));
|
||||
__ANNOTATION(SAL_no_competing_thread(void));
|
||||
__ANNOTATION(SAL_set_same_lock(__deferTypecheck void *, __deferTypecheck void *));
|
||||
|
||||
/*
|
||||
* pre-defined global system locks
|
||||
*/
|
||||
extern int _Global_interlock_;
|
||||
extern int _Global_cancel_spin_lock_;
|
||||
extern int _Global_critical_region_;
|
||||
|
||||
/*
|
||||
* Annotation identifiers
|
||||
*/
|
||||
#define _Internal_create_CSAL_identifier_(id) const char id##[] = "";
|
||||
|
||||
_Internal_create_CSAL_identifier_(_Lock_kind_mutex_)
|
||||
_Internal_create_CSAL_identifier_(_Lock_kind_event_)
|
||||
_Internal_create_CSAL_identifier_(_Lock_kind_semaphore_)
|
||||
_Internal_create_CSAL_identifier_(_Lock_kind_spin_lock_)
|
||||
_Internal_create_CSAL_identifier_(_Lock_kind_critical_section_)
|
||||
|
||||
/*
|
||||
* data protection
|
||||
*/
|
||||
#define _Guarded_by_(lock) _SA_annotes1(SAL_guarded_by,lock)
|
||||
#define _Write_guarded_by_(lock) _SA_annotes1(SAL_write_guarded_by,lock)
|
||||
#define _Interlocked_ _Guarded_by_(_Global_interlock_)
|
||||
|
||||
/*
|
||||
* interlocked operand used in interlocked instructions
|
||||
*/
|
||||
#ifndef _Interlocked_operand_
|
||||
#define _Interlocked_operand_ _Pre_ _SA_annotes0(SAL_interlocked)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* caller/callee locking contracts
|
||||
*/
|
||||
#define _Requires_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_lock_held,lock)
|
||||
#define _Requires_exclusive_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_exclusive_lock_held,lock)
|
||||
#define _Requires_shared_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_shared_lock_held,lock)
|
||||
|
||||
#define _Requires_lock_not_held_(lock) _Pre_ _SA_annotes1(SAL_requires_lock_not_held,lock)
|
||||
#define _Requires_no_locks_held_ _Pre_ _SA_annotes0(SAL_requires_no_locks_held)
|
||||
|
||||
/*
|
||||
* acquire/release locking side effects
|
||||
*/
|
||||
#define _Acquires_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_lock,lock)
|
||||
#define _Acquires_exclusive_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_exclusive_lock,lock)
|
||||
#define _Acquires_shared_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_shared_lock,lock)
|
||||
|
||||
#define _Releases_lock_(lock) _Post_ _SA_annotes1(SAL_releases_lock,lock)
|
||||
#define _Releases_exclusive_lock_(lock) _Post_ _SA_annotes1(SAL_releases_exclusive_lock,lock)
|
||||
#define _Releases_shared_lock_(lock) _Post_ _SA_annotes1(SAL_releases_shared_lock,lock)
|
||||
|
||||
/*
|
||||
* acquire/release locking side effects for non-reentrant locks
|
||||
*/
|
||||
#define _Acquires_nonreentrant_lock_(lock) \
|
||||
_Group_( \
|
||||
_Requires_lock_not_held_(lock) \
|
||||
_Acquires_lock_(lock))
|
||||
|
||||
#define _Releases_nonreentrant_lock_(lock) \
|
||||
_Group_( \
|
||||
_Requires_lock_held_(lock) \
|
||||
_Releases_lock_(lock))
|
||||
|
||||
#define _Post_same_lock_(a,b) _Post_ _SA_annotes2(SAL_set_same_lock,a,b)
|
||||
|
||||
/*
|
||||
* lock level
|
||||
*/
|
||||
#define _Create_lock_level_(level) _Internal_create_CSAL_identifier_(level)
|
||||
|
||||
#define _Has_lock_level_(level) _SA_annotes1(SAL_has_lock_level,#level)
|
||||
|
||||
#define _Internal_lock_level_order_(a,b) _SA_annotes2(SAL_lock_level_order,a,b)
|
||||
#define _Csalcat1_(x,y) x##y
|
||||
#define _Csalcat2_(x,y) _Csalcat1_(x,y)
|
||||
|
||||
#define _Lock_level_order_(a,b) \
|
||||
extern _Internal_lock_level_order_(a,b) void _Sal_order_##a##_##b(_In_z_ char*a, _In_z_ char*b); \
|
||||
static __inline void CSALCAT2(CSAL_LockOrder,__COUNTER__)(void){_Sal_order_##a##_##b(#a,#b);}
|
||||
|
||||
/*
|
||||
* threading context
|
||||
*/
|
||||
#define _No_competing_thread_ _Pre_ _SA_annotes0(SAL_no_competing_thread)
|
||||
|
||||
/*
|
||||
* refinement and suppression
|
||||
*/
|
||||
extern _Acquires_lock_(*plock) void _Internal_acquires_lock_(void* plock);
|
||||
extern _Releases_lock_(*plock) void _Internal_releases_lock_(void* plock);
|
||||
|
||||
#define _Internal_set_lock_count_to_zero_(lock) _Post_ _SA_annotes1(SAL_set_lock_count_to_zero,lock)
|
||||
#define _Internal_set_lock_count_to_one_(lock) _Post_ _SA_annotes1(SAL_set_lock_count_to_one,lock)
|
||||
|
||||
extern _Internal_set_lock_count_to_one_(*plock) void _Internal_lock_held_(void* plock);
|
||||
extern _Internal_set_lock_count_to_zero_(*plock) void _Internal_lock_not_held_(void* plock);
|
||||
extern _Post_same_lock_(*plock1, *plock2) void _Internal_same_lock_(void* plock1, void* plock2);
|
||||
|
||||
#define _Analysis_assume_lock_acquired_(lock) _Internal_acquires_lock_((void*)(&(lock)))
|
||||
#define _Analysis_assume_lock_released_(lock) _Internal_releases_lock_((void*)(&(lock)))
|
||||
|
||||
#define _Analysis_assume_lock_held_(lock) _Internal_lock_held_((void*)(&(lock)))
|
||||
#define _Analysis_assume_lock_not_held_(lock) _Internal_lock_not_held_((void*)(&(lock)))
|
||||
#define _Analysis_assume_same_lock_(lock1, lock2) _Internal_same_lock_((void*)(&(lock1)), (void*)(&(lock2)))
|
||||
|
||||
/*
|
||||
* _Function_ignore_lock_checking_ may be deprecated in future versions of SAL
|
||||
*/
|
||||
#define _Function_ignore_lock_checking_(lock) _Pre_ _SA_annotes1(SAL_ignore_lock_match,lock)
|
||||
extern _Function_ignore_lock_checking_(*plock) void _Internal_suppress_lock_checking_(void* plock);
|
||||
|
||||
/*
|
||||
* _Analysis_suppress_lock_checking_ may be deprecated in future versions of SAL
|
||||
*/
|
||||
#define _Analysis_suppress_lock_checking_(lock) _Internal_suppress_lock_checking_((void*)(&(lock)));
|
||||
|
||||
#define _Benign_race_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26130 26180 26131 26181 28112))
|
||||
#define _Benign_race_end_ __pragma(warning(pop))
|
||||
|
||||
#define _No_competing_thread_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26101 26151 26110 26160 26130 26180 26131 26181 28112))
|
||||
#define _No_competing_thread_end_ __pragma(warning(pop))
|
||||
|
||||
/*
|
||||
* lock kinds
|
||||
*/
|
||||
#define _Has_lock_kind_(kind) _SA_annotes1(SAL_has_lock_property,#kind)
|
||||
|
||||
|
||||
/*
|
||||
* Old spelling
|
||||
* Note: the old version may be deprecated in the future!!!
|
||||
*/
|
||||
extern int __system_interlock;
|
||||
extern int __system_cancel_spinlock;
|
||||
extern int __system_critical_region;
|
||||
|
||||
#define __guarded_by(lock) _SA_annotes1(SAL_guarded_by,lock)
|
||||
#define __write_guarded_by(lock) _SA_annotes1(SAL_write_guarded_by,lock)
|
||||
#define __interlocked __guarded_by(_Global_interlock_)
|
||||
|
||||
/*
|
||||
* caller/callee locking contracts
|
||||
*/
|
||||
#define __requires_lock_held(lock) __pre _SA_annotes1(SAL_requires_lock_held,lock)
|
||||
#define __requires_exclusive_lock_held(lock) __pre _SA_annotes1(SAL_requires_exclusive_lock_held,lock)
|
||||
#define __requires_shared_lock_held(lock) __pre _SA_annotes1(SAL_requires_shared_lock_held,lock)
|
||||
|
||||
#define __requires_lock_not_held(lock) __pre _SA_annotes1(SAL_requires_lock_not_held,lock)
|
||||
#define __requires_no_locks_held __pre _SA_annotes0(SAL_requires_no_locks_held)
|
||||
|
||||
/*
|
||||
* acquire/release locking side effects
|
||||
*/
|
||||
#define __acquires_lock(lock) __post _SA_annotes1(SAL_acquires_lock,lock)
|
||||
#define __acquires_exclusive_lock(lock) __post _SA_annotes1(SAL_acquires_exclusive_lock,lock)
|
||||
#define __acquires_shared_lock(lock) __post _SA_annotes1(SAL_acquires_shared_lock,lock)
|
||||
|
||||
#define __releases_lock(lock) __post _SA_annotes1(SAL_releases_lock,lock)
|
||||
#define __releases_exclusive_lock(lock) __post _SA_annotes1(SAL_releases_exclusive_lock,lock)
|
||||
#define __releases_shared_lock(lock) __post _SA_annotes1(SAL_releases_shared_lock,lock)
|
||||
|
||||
/*
|
||||
* lock properties
|
||||
* The following kind options are supported:
|
||||
* __has_lock_property(MUTEX)
|
||||
* __has_lock_property(EVENT)
|
||||
* __has_lock_property(SEMAPHORE)
|
||||
* __has_lock_property(OTHER_HANDLE)
|
||||
* __has_lock_property(REENTRANT)
|
||||
* __has_lock_property(NON_REENTRANT)
|
||||
*/
|
||||
#define __has_lock_property(kind) _SA_annotes1(SAL_has_lock_property,#kind)
|
||||
|
||||
/*
|
||||
* lock level
|
||||
*/
|
||||
#define __declare_lock_level(level) _Internal_create_CSAL_identifier_(level)
|
||||
#define __has_lock_level(level) _SA_annotes1(SAL_has_lock_level,#level)
|
||||
|
||||
#define __internal_lock_level_order(a,b) _SA_annotes2(SAL_lock_level_order,#a,#b)
|
||||
#define CSALCAT1(x,y) x##y
|
||||
#define CSALCAT2(x,y) CSALCAT1(x,y)
|
||||
|
||||
#define __lock_level_order(a,b) \
|
||||
extern __internal_lock_level_order(a,b) void __sal_order_##a##_##b(__in_z char*a, __in_z char*b); \
|
||||
static __inline void CSALCAT2(CSAL_LockOrder,__COUNTER__)(void){__sal_order_##a##_##b(#a,#b);}
|
||||
|
||||
/*
|
||||
* threading context
|
||||
*/
|
||||
#define __no_competing_thread __pre _SA_annotes0(SAL_no_competing_thread)
|
||||
|
||||
/*
|
||||
* refinement and suppression
|
||||
*/
|
||||
extern __acquires_lock(*plock) void __internal_acquires_lock(void* plock);
|
||||
extern __releases_lock(*plock) void __internal_releases_lock(void* plock);
|
||||
|
||||
#define __analysis_assume_lock_acquired(lock) __internal_acquires_lock((void*)(&(lock)))
|
||||
#define __analysis_assume_lock_released(lock) __internal_releases_lock((void*)(&(lock)))
|
||||
|
||||
#define __function_ignore_lock_checking(lock) __pre _SA_annotes1(SAL_ignore_lock_match,lock)
|
||||
extern __function_ignore_lock_checking(*plock) void __internal_suppress_lock_checking(void* plock);
|
||||
|
||||
#define __analysis_suppress_lock_checking(lock) __internal_suppress_lock_checking((void*)(&(lock)));
|
||||
|
||||
#define BENIGN_RACE_BEGIN __pragma(warning(push)) __pragma(warning(disable:26100 26150 26130 26180 26131 26181))
|
||||
#define BENIGN_RACE_END __pragma(warning(pop))
|
||||
|
||||
#define NO_COMPETING_THREAD_BEGIN __pragma(warning(push)) __pragma(warning(disable:26100 26150 26101 26151 26110 26160 26130 26180 26131 26181))
|
||||
#define NO_COMPETING_THREAD_END __pragma(warning(pop))
|
||||
|
||||
#else
|
||||
|
||||
#ifndef _Interlocked_operand_
|
||||
#define _Interlocked_operand_
|
||||
#endif
|
||||
|
||||
#define _Guarded_by_(lock)
|
||||
#define _Write_guarded_by_(lock)
|
||||
#define _Interlocked_
|
||||
#define _Requires_lock_held_(lock)
|
||||
#define _Requires_exclusive_lock_held_(lock)
|
||||
#define _Requires_shared_lock_held_(lock)
|
||||
#define _Requires_lock_not_held_(lock)
|
||||
#define _Requires_no_locks_held_
|
||||
#define _Acquires_lock_(lock)
|
||||
#define _Acquires_exclusive_lock_(lock)
|
||||
#define _Acquires_shared_lock_(lock)
|
||||
#define _Releases_lock_(lock)
|
||||
#define _Releases_exclusive_lock_(lock)
|
||||
#define _Releases_shared_lock_(lock)
|
||||
#define _Acquires_nonreentrant_lock_(lock)
|
||||
#define _Releases_nonreentrant_lock_(lock)
|
||||
|
||||
#define _Post_same_lock_(lock1,lock2)
|
||||
|
||||
#define _Internal_set_lock_count_(lock, count)
|
||||
|
||||
#define _Create_lock_level_(level)
|
||||
#define _Has_lock_level_(level)
|
||||
#define _Internal_lock_level_order_(a,b)
|
||||
#define _Csalcat1_(x,y)
|
||||
#define _Csalcat2_(x,y)
|
||||
#define _Lock_level_order_(a,b)
|
||||
#define _No_competing_thread_
|
||||
#define _Analysis_assume_lock_acquired_(lock)
|
||||
#define _Analysis_assume_lock_released_(lock)
|
||||
#define _Analysis_assume_lock_held_(lock)
|
||||
#define _Analysis_assume_lock_not_held_(lock)
|
||||
#define _Analysis_assume_same_lock_(lock1, lock2)
|
||||
#define _Function_ignore_lock_checking_(lock)
|
||||
#define _Analysis_suppress_lock_checking_(lock)
|
||||
|
||||
#define _Benign_race_begin_ __pragma(warning(push))
|
||||
#define _Benign_race_end_ __pragma(warning(pop))
|
||||
|
||||
#define _No_competing_thread_begin_ __pragma(warning(push))
|
||||
#define _No_competing_thread_end_ __pragma(warning(pop))
|
||||
|
||||
#define _Has_lock_kind_(kind)
|
||||
|
||||
/*
|
||||
* Old spelling: will be deprecated
|
||||
*/
|
||||
#define __guarded_by(lock)
|
||||
#define __write_guarded_by(lock)
|
||||
#define __interlocked
|
||||
#define __requires_lock_held(lock)
|
||||
#define __requires_exclusive_lock_held(lock)
|
||||
#define __requires_shared_lock_held(lock)
|
||||
#define __requires_lock_not_held(lock)
|
||||
#define __requires_no_locks_held
|
||||
#define __acquires_lock(lock)
|
||||
#define __acquires_exclusive_lock(lock)
|
||||
#define __acquires_shared_lock(lock)
|
||||
#define __releases_lock(lock)
|
||||
#define __releases_exclusive_lock(lock)
|
||||
#define __releases_shared_lock(lock)
|
||||
|
||||
#define __has_lock_property(kind)
|
||||
#define __declare_lock_level(level)
|
||||
#define __has_lock_level(level)
|
||||
#define __internal_lock_level_order(a,b)
|
||||
#define CSALCAT1(x,y)
|
||||
#define CSALCAT2(x,y)
|
||||
#define __lock_level_order(a,b)
|
||||
#define __no_competing_thread
|
||||
#define __analysis_assume_lock_acquired(lock)
|
||||
#define __analysis_assume_lock_released(lock)
|
||||
#define __function_ignore_lock_checking(lock)
|
||||
#define __analysis_suppress_lock_checking(lock)
|
||||
|
||||
#define BENIGN_RACE_BEGIN __pragma(warning(push))
|
||||
#define BENIGN_RACE_END __pragma(warning(pop))
|
||||
|
||||
#define NO_COMPETING_THREAD_BEGIN __pragma(warning(push))
|
||||
#define NO_COMPETING_THREAD_END __pragma(warning(pop))
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CONCURRENCYSAL_H
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,426 @@
|
|||
// Copyright (c) Microsoft Corporation. All Rights Reserved
|
||||
|
||||
import "dxgi.idl";
|
||||
|
||||
cpp_quote("#include <winapifamily.h>")
|
||||
|
||||
#pragma region Desktop Family
|
||||
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
|
||||
|
||||
[
|
||||
object,
|
||||
uuid( ea9dbf1a-c88e-4486-854a-98aa0138f30c ),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIDisplayControl :
|
||||
IUnknown
|
||||
{
|
||||
BOOL IsStereoEnabled();
|
||||
void SetStereoEnabled(BOOL enabled);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIOutputDuplication structures
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
typedef struct DXGI_OUTDUPL_MOVE_RECT
|
||||
{
|
||||
POINT SourcePoint;
|
||||
RECT DestinationRect;
|
||||
} DXGI_OUTDUPL_MOVE_RECT;
|
||||
|
||||
typedef struct DXGI_OUTDUPL_DESC
|
||||
{
|
||||
DXGI_MODE_DESC ModeDesc;
|
||||
DXGI_MODE_ROTATION Rotation;
|
||||
BOOL DesktopImageInSystemMemory;
|
||||
} DXGI_OUTDUPL_DESC;
|
||||
|
||||
typedef struct DXGI_OUTDUPL_POINTER_POSITION
|
||||
{
|
||||
POINT Position;
|
||||
BOOL Visible;
|
||||
} DXGI_OUTDUPL_POINTER_POSITION;
|
||||
|
||||
typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE
|
||||
{
|
||||
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
|
||||
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
|
||||
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
|
||||
} DXGI_OUTDUPL_POINTER_SHAPE_TYPE;
|
||||
|
||||
typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO
|
||||
{
|
||||
UINT Type;
|
||||
UINT Width;
|
||||
UINT Height;
|
||||
UINT Pitch;
|
||||
POINT HotSpot;
|
||||
} DXGI_OUTDUPL_POINTER_SHAPE_INFO;
|
||||
|
||||
typedef struct DXGI_OUTDUPL_FRAME_INFO
|
||||
{
|
||||
LARGE_INTEGER LastPresentTime;
|
||||
LARGE_INTEGER LastMouseUpdateTime;
|
||||
UINT AccumulatedFrames;
|
||||
BOOL RectsCoalesced;
|
||||
BOOL ProtectedContentMaskedOut;
|
||||
DXGI_OUTDUPL_POINTER_POSITION PointerPosition;
|
||||
UINT TotalMetadataBufferSize;
|
||||
UINT PointerShapeBufferSize;
|
||||
} DXGI_OUTDUPL_FRAME_INFO;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIOutputDuplication interface
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
[
|
||||
object,
|
||||
uuid(191cfac3-a341-470d-b26e-a864f428319c),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIOutputDuplication :
|
||||
IDXGIObject
|
||||
{
|
||||
void GetDesc([out, annotation ("_Out_")] DXGI_OUTDUPL_DESC* pDesc);
|
||||
HRESULT AcquireNextFrame([in, annotation ("_In_")] UINT TimeoutInMilliseconds,
|
||||
[out, annotation("_Out_")] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,
|
||||
[out, annotation("_Out_")] IDXGIResource** ppDesktopResource);
|
||||
HRESULT GetFrameDirtyRects([in, annotation("_In_")] UINT DirtyRectsBufferSize,
|
||||
[out, annotation("_Out_writes_bytes_to_(DirtyRectsBufferSize, *pDirtyRectsBufferSizeRequired)")] RECT* pDirtyRectsBuffer,
|
||||
[out, annotation("_Out_")] UINT* pDirtyRectsBufferSizeRequired);
|
||||
HRESULT GetFrameMoveRects([in, annotation("_In_")] UINT MoveRectsBufferSize,
|
||||
[out, annotation("_Out_writes_bytes_to_(MoveRectsBufferSize, *pMoveRectsBufferSizeRequired)")] DXGI_OUTDUPL_MOVE_RECT* pMoveRectBuffer,
|
||||
[out, annotation("_Out_")] UINT* pMoveRectsBufferSizeRequired);
|
||||
HRESULT GetFramePointerShape([in, annotation("_In_")] UINT PointerShapeBufferSize,
|
||||
[out, annotation("_Out_writes_bytes_to_(PointerShapeBufferSize, *pPointerShapeBufferSizeRequired)")] void* pPointerShapeBuffer,
|
||||
[out, annotation("_Out_")] UINT* pPointerShapeBufferSizeRequired,
|
||||
[out, annotation("_Out_")] DXGI_OUTDUPL_POINTER_SHAPE_INFO* pPointerShapeInfo);
|
||||
HRESULT MapDesktopSurface([out, annotation("_Out_")] DXGI_MAPPED_RECT* pLockedRect);
|
||||
HRESULT UnMapDesktopSurface();
|
||||
HRESULT ReleaseFrame();
|
||||
};
|
||||
cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
|
||||
#pragma endregion
|
||||
|
||||
#pragma region App Family
|
||||
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)")
|
||||
|
||||
typedef enum DXGI_ALPHA_MODE
|
||||
{
|
||||
DXGI_ALPHA_MODE_UNSPECIFIED = 0,
|
||||
DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
|
||||
DXGI_ALPHA_MODE_STRAIGHT = 2,
|
||||
DXGI_ALPHA_MODE_IGNORE = 3,
|
||||
DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff
|
||||
} DXGI_ALPHA_MODE;
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGISurface2 :
|
||||
IDXGISurface1
|
||||
{
|
||||
HRESULT GetResource([in, annotation("_In_")] REFIID riid,
|
||||
[out, annotation("_Out_")] void **ppParentResource,
|
||||
[out, annotation("_Out_")] UINT *pSubresourceIndex);
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(30961379-4609-4a41-998e-54fe567ee0c1),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIResource1 :
|
||||
IDXGIResource
|
||||
{
|
||||
HRESULT CreateSubresourceSurface(
|
||||
UINT index,
|
||||
[out, annotation("_Out_")] IDXGISurface2 **ppSurface );
|
||||
|
||||
HRESULT CreateSharedHandle(
|
||||
[in, annotation("_In_opt_")] const SECURITY_ATTRIBUTES *pAttributes,
|
||||
[in, annotation("_In_")] DWORD dwAccess,
|
||||
[in, annotation("_In_opt_")] LPCWSTR lpName,
|
||||
[out, annotation("_Out_")] HANDLE *pHandle);
|
||||
};
|
||||
|
||||
typedef enum _DXGI_OFFER_RESOURCE_PRIORITY
|
||||
{
|
||||
DXGI_OFFER_RESOURCE_PRIORITY_LOW=1,
|
||||
DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
|
||||
DXGI_OFFER_RESOURCE_PRIORITY_HIGH,
|
||||
} DXGI_OFFER_RESOURCE_PRIORITY;
|
||||
|
||||
[
|
||||
object,
|
||||
uuid( 05008617-fbfd-4051-a790-144884b4f6a9 ),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIDevice2 :
|
||||
IDXGIDevice1
|
||||
{
|
||||
HRESULT OfferResources(
|
||||
[in, annotation("_In_")] UINT NumResources,
|
||||
[in, size_is(NumResources), annotation("_In_reads_(NumResources)")] IDXGIResource *const *ppResources,
|
||||
[in, annotation("_In_")] DXGI_OFFER_RESOURCE_PRIORITY Priority);
|
||||
HRESULT ReclaimResources(
|
||||
[in, annotation("_In_")] UINT NumResources,
|
||||
[in, size_is(NumResources), annotation("_In_reads_(NumResources)")] IDXGIResource *const *ppResources,
|
||||
[out, size_is(NumResources), annotation("_Out_writes_all_opt_(NumResources)")] BOOL *pDiscarded);
|
||||
HRESULT EnqueueSetEvent( [in, annotation("_In_")] HANDLE hEvent );
|
||||
};
|
||||
|
||||
const UINT DXGI_ENUM_MODES_STEREO = 4UL;
|
||||
const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 8UL;
|
||||
|
||||
const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000L;
|
||||
const DWORD DXGI_SHARED_RESOURCE_WRITE = 1;
|
||||
|
||||
typedef struct DXGI_MODE_DESC1
|
||||
{
|
||||
UINT Width;
|
||||
UINT Height;
|
||||
DXGI_RATIONAL RefreshRate;
|
||||
DXGI_FORMAT Format;
|
||||
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
|
||||
DXGI_MODE_SCALING Scaling;
|
||||
BOOL Stereo;
|
||||
} DXGI_MODE_DESC1;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGISwapchain1 structures
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
typedef enum DXGI_SCALING
|
||||
{
|
||||
DXGI_SCALING_STRETCH = 0,
|
||||
DXGI_SCALING_NONE = 1,
|
||||
} DXGI_SCALING;
|
||||
|
||||
typedef struct DXGI_SWAP_CHAIN_DESC1
|
||||
{
|
||||
UINT Width;
|
||||
UINT Height;
|
||||
DXGI_FORMAT Format;
|
||||
BOOL Stereo;
|
||||
DXGI_SAMPLE_DESC SampleDesc;
|
||||
DXGI_USAGE BufferUsage;
|
||||
UINT BufferCount;
|
||||
DXGI_SCALING Scaling;
|
||||
DXGI_SWAP_EFFECT SwapEffect;
|
||||
DXGI_ALPHA_MODE AlphaMode;
|
||||
UINT Flags; // DXGI_SWAP_CHAIN_FLAG
|
||||
} DXGI_SWAP_CHAIN_DESC1;
|
||||
|
||||
typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC
|
||||
{
|
||||
DXGI_RATIONAL RefreshRate;
|
||||
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
|
||||
DXGI_MODE_SCALING Scaling;
|
||||
BOOL Windowed;
|
||||
} DXGI_SWAP_CHAIN_FULLSCREEN_DESC;
|
||||
|
||||
typedef struct DXGI_PRESENT_PARAMETERS
|
||||
{
|
||||
UINT DirtyRectsCount;
|
||||
RECT* pDirtyRects;
|
||||
RECT* pScrollRect;
|
||||
POINT* pScrollOffset;
|
||||
} DXGI_PRESENT_PARAMETERS;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGISwapchain1 interface
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
[
|
||||
object,
|
||||
uuid( 790a45f7-0d42-4876-983a-0a55cfe6f4aa ),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGISwapChain1 :
|
||||
IDXGISwapChain
|
||||
{
|
||||
HRESULT GetDesc1( [out, annotation("_Out_")] DXGI_SWAP_CHAIN_DESC1 *pDesc );
|
||||
HRESULT GetFullscreenDesc( [out, annotation("_Out_")] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc );
|
||||
|
||||
HRESULT GetHwnd( [out, annotation("_Out_")] HWND *pHwnd);
|
||||
HRESULT GetCoreWindow (
|
||||
[in, annotation("_In_")] REFIID refiid,
|
||||
[out, annotation("_Out_")] void **ppUnk);
|
||||
|
||||
HRESULT Present1(
|
||||
[in] UINT SyncInterval,
|
||||
[in] UINT PresentFlags,
|
||||
[in, annotation("_In_")] const DXGI_PRESENT_PARAMETERS* pPresentParameters );
|
||||
BOOL IsTemporaryMonoSupported();
|
||||
HRESULT GetRestrictToOutput( [out, annotation("_Out_")] IDXGIOutput** ppRestrictToOutput );
|
||||
HRESULT SetBackgroundColor( [in, annotation("_In_")] const DXGI_RGBA* pColor );
|
||||
HRESULT GetBackgroundColor( [out, annotation("_Out_")] DXGI_RGBA* pColor );
|
||||
HRESULT SetRotation( [in, annotation("_In_")] DXGI_MODE_ROTATION Rotation );
|
||||
HRESULT GetRotation( [out, annotation("_Out_")] DXGI_MODE_ROTATION* pRotation );
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIFactory2 interface
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
[
|
||||
object,
|
||||
uuid( 50c83a1c-e072-4c48-87b0-3630fa36a6d0 ),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIFactory2 :
|
||||
IDXGIFactory1
|
||||
{
|
||||
BOOL IsWindowedStereoEnabled();
|
||||
|
||||
HRESULT CreateSwapChainForHwnd(
|
||||
[in, annotation("_In_")] IUnknown *pDevice,
|
||||
[in, annotation("_In_")] HWND hWnd,
|
||||
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
[in, annotation("_In_opt_")] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,
|
||||
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
|
||||
[out, annotation("_Out_")] IDXGISwapChain1 **ppSwapChain );
|
||||
|
||||
HRESULT CreateSwapChainForCoreWindow(
|
||||
[in, annotation("_In_")] IUnknown *pDevice,
|
||||
[in, annotation("_In_")] IUnknown *pWindow,
|
||||
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
|
||||
[out, annotation("_Out_")] IDXGISwapChain1 **ppSwapChain );
|
||||
|
||||
HRESULT GetSharedResourceAdapterLuid(
|
||||
[annotation("_In_")] HANDLE hResource,
|
||||
[annotation("_Out_")] LUID* pLuid);
|
||||
|
||||
HRESULT RegisterStereoStatusWindow(
|
||||
[in, annotation("_In_")] HWND WindowHandle,
|
||||
[in, annotation("_In_")] UINT wMsg,
|
||||
[out, annotation("_Out_")] DWORD *pdwCookie );
|
||||
|
||||
HRESULT RegisterStereoStatusEvent(
|
||||
[in, annotation("_In_")] HANDLE hEvent,
|
||||
[out, annotation("_Out_")] DWORD *pdwCookie );
|
||||
|
||||
void UnregisterStereoStatus(
|
||||
[in, annotation("_In_")] DWORD dwCookie );
|
||||
|
||||
HRESULT RegisterOcclusionStatusWindow(
|
||||
[in, annotation("_In_")] HWND WindowHandle,
|
||||
[in, annotation("_In_")] UINT wMsg,
|
||||
[out, annotation("_Out_")] DWORD *pdwCookie );
|
||||
|
||||
HRESULT RegisterOcclusionStatusEvent(
|
||||
[in, annotation("_In_")] HANDLE hEvent,
|
||||
[out, annotation("_Out_")] DWORD *pdwCookie );
|
||||
|
||||
void UnregisterOcclusionStatus(
|
||||
[in, annotation("_In_")] DWORD dwCookie );
|
||||
|
||||
HRESULT CreateSwapChainForComposition(
|
||||
[in, annotation("_In_")] IUnknown *pDevice,
|
||||
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
||||
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
|
||||
[out, annotation("_Outptr_")] IDXGISwapChain1 **ppSwapChain );
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIAdapter2 structures
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY
|
||||
{
|
||||
DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
|
||||
DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
|
||||
DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
|
||||
DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
|
||||
DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
|
||||
} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
|
||||
|
||||
typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY
|
||||
{
|
||||
DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
|
||||
DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
|
||||
DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
|
||||
DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
|
||||
DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
|
||||
} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
|
||||
|
||||
typedef struct DXGI_ADAPTER_DESC2
|
||||
{
|
||||
WCHAR Description[128];
|
||||
|
||||
UINT VendorId;
|
||||
UINT DeviceId;
|
||||
UINT SubSysId;
|
||||
UINT Revision;
|
||||
|
||||
SIZE_T DedicatedVideoMemory;
|
||||
SIZE_T DedicatedSystemMemory;
|
||||
SIZE_T SharedSystemMemory;
|
||||
|
||||
LUID AdapterLuid;
|
||||
|
||||
UINT Flags;
|
||||
|
||||
DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
|
||||
DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
|
||||
} DXGI_ADAPTER_DESC2;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIAdapter2 interface
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
[
|
||||
object,
|
||||
uuid(0AA1AE0A-FA0E-4B84-8644-E05FF8E5ACB5),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIAdapter2 :
|
||||
IDXGIAdapter1
|
||||
{
|
||||
HRESULT GetDesc2( [out, annotation("_Out_")] DXGI_ADAPTER_DESC2 *pDesc);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
// IDXGIOutput1
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
[
|
||||
object,
|
||||
uuid(00cddea8-939b-4b83-a340-a685226666cc),
|
||||
local,
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDXGIOutput1 :
|
||||
IDXGIOutput
|
||||
{
|
||||
HRESULT GetDisplayModeList1(
|
||||
[in] DXGI_FORMAT EnumFormat,
|
||||
[in] UINT Flags,
|
||||
[in, out, annotation("_Inout_")] UINT * pNumModes,
|
||||
[out, annotation("_Out_writes_to_opt_(*pNumModes,*pNumModes)")] DXGI_MODE_DESC1 *pDesc);
|
||||
HRESULT FindClosestMatchingMode1(
|
||||
[in, annotation("_In_")] const DXGI_MODE_DESC1 *pModeToMatch,
|
||||
[out, annotation("_Out_")] DXGI_MODE_DESC1 *pClosestMatch,
|
||||
[in, annotation("_In_opt_")] IUnknown * pConcernedDevice );
|
||||
HRESULT GetDisplaySurfaceData1( [in, annotation("_In_")] IDXGIResource *pDestination );
|
||||
HRESULT DuplicateOutput([in, annotation("_In_")] IUnknown *pDevice,
|
||||
[out, annotation("_Out_")] IDXGIOutputDuplication **ppOutputDuplication);
|
||||
};
|
||||
|
||||
cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */")
|
||||
#pragma endregion
|
||||
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIDisplayControl,0xea9dbf1a,0xc88e,0x4486,0x85,0x4a,0x98,0xaa,0x01,0x38,0xf3,0x0c);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIOutputDuplication,0x191cfac3,0xa341,0x470d,0xb2,0x6e,0xa8,0x64,0xf4,0x28,0x31,0x9c);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGISurface2,0xaba496dd,0xb617,0x4cb8,0xa8,0x66,0xbc,0x44,0xd7,0xeb,0x1f,0xa2);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIResource1,0x30961379,0x4609,0x4a41,0x99,0x8e,0x54,0xfe,0x56,0x7e,0xe0,0xc1);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIDevice2,0x05008617,0xfbfd,0x4051,0xa7,0x90,0x14,0x48,0x84,0xb4,0xf6,0xa9);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGISwapChain1,0x790a45f7,0x0d42,0x4876,0x98,0x3a,0x0a,0x55,0xcf,0xe6,0xf4,0xaa);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIFactory2,0x50c83a1c,0xe072,0x4c48,0x87,0xb0,0x36,0x30,0xfa,0x36,0xa6,0xd0);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIAdapter2,0x0AA1AE0A,0xFA0E,0x4B84,0x86,0x44,0xE0,0x5F,0xF8,0xE5,0xAC,0xB5);" )
|
||||
cpp_quote( "DEFINE_GUID(IID_IDXGIOutput1,0x00cddea8,0x939b,0x4b83,0xa3,0x40,0xa6,0x85,0x22,0x66,0x66,0xcc);" )
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
|
||||
winapifamily.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Master include file for API family partitioning.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _INC_WINAPIFAMILY
|
||||
#define _INC_WINAPIFAMILY
|
||||
|
||||
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||
#pragma once
|
||||
#endif // defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||
|
||||
/*
|
||||
* Windows APIs can be placed in a partition represented by one of the below bits. The
|
||||
* WINAPI_FAMILY value determines which partitions are available to the client code.
|
||||
*/
|
||||
|
||||
#define WINAPI_PARTITION_DESKTOP 0x00000001
|
||||
#define WINAPI_PARTITION_APP 0x00000002
|
||||
|
||||
/*
|
||||
* A family may be defined as the union of multiple families. WINAPI_FAMILY should be set
|
||||
* to one of these values.
|
||||
*/
|
||||
#define WINAPI_FAMILY_APP WINAPI_PARTITION_APP
|
||||
#define WINAPI_FAMILY_DESKTOP_APP (WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_APP)
|
||||
|
||||
/*
|
||||
* A constant that specifies which code is available to the program's target runtime platform.
|
||||
* By default we use the 'desktop app' family which places no restrictions on the API surface.
|
||||
* To restrict the API surface to just the App API surface, define WINAPI_FAMILY to WINAPI_FAMILY_APP.
|
||||
*/
|
||||
#ifndef WINAPI_FAMILY
|
||||
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
|
||||
#endif
|
||||
|
||||
/* Macro to determine if a partition is enabled */
|
||||
#define WINAPI_FAMILY_PARTITION(Partition) ((WINAPI_FAMILY & Partition) == Partition)
|
||||
|
||||
/* Macro to determine if only one partition is enabled from a set */
|
||||
#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)
|
||||
|
||||
/*
|
||||
* Macro examples:
|
||||
* The following examples are typical macro usage for enabling/restricting access to header code based
|
||||
* on the target runtime platform. The examples assume a correct setting of the WINAPI_FAMILY macro.
|
||||
*
|
||||
* App programs:
|
||||
* Explicitly set WINAPI_FAMILY to WINAPI_PARTITION_APP (cannot access DESKTOP partition)
|
||||
* Desktop programs:
|
||||
* Leave WINAPI_FAMILY set to the default above (currently WINAPI_FAMILY_DESKTOP_APP)
|
||||
*
|
||||
* Note: Other families and partitions may be added in the future.
|
||||
*
|
||||
*
|
||||
* The WINAPI_FAMILY_PARTITION macro:
|
||||
* Code-block is available to programs that have access to specified partition.
|
||||
*
|
||||
* Example: Available to App and Desktop programs
|
||||
* #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
|
||||
*
|
||||
* Example: Available to Desktop programs
|
||||
* #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
|
||||
*
|
||||
*
|
||||
* The WINAPI_FAMILY_ONE_PARTITION macro:
|
||||
* Code-block is available to programs that have access to specified parition, but not others in the partition set.
|
||||
*
|
||||
* Example: Available only to App programs
|
||||
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY, WINAPI_PARTITION_APP )
|
||||
*
|
||||
* Example: Available only to Desktop programs
|
||||
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY, WINAPI_PARTITION_DESKTOP )
|
||||
*
|
||||
* Example: Available to App, but not Desktop programs
|
||||
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY_DESKTOP_APP, WINAPI_PARTITION_APP )
|
||||
*/
|
||||
|
||||
#endif /* !_INC_WINAPIFAMILY */
|
|
@ -4,12 +4,15 @@ Browse "Найти"
|
|||
BuildingMP4Dialog "Создаю MP4"
|
||||
Cancel "Отменить"
|
||||
ClearHotkey "Сбросить"
|
||||
Color "Цвет"
|
||||
Default "По умолчанию"
|
||||
DeleteConfirm "Вы уверены, что хотите удалить выбранное?"
|
||||
Desktop "Рабочий стол"
|
||||
Disable "Отключено"
|
||||
EndingDelay "Завершение стрима с задержкой..."
|
||||
EnterName "Пожалуйста, введите имя"
|
||||
GlobalSources "Глобальные источники"
|
||||
IncompatibleModules "В OBS обнаружены несовместимые модули внедрения. Убедитесь что OBS добавлен в список исключения таких программ захвата как DXTory, FRAPS и т.д.\r\n\r\nЧтобы изменения вступили в силу, после изменения настроек исключений может понадобиться перезапуск OBS и всех программ захвата, использующих внедрение в процесс."
|
||||
MicrophoneFailure "Ошибка инициализации микрофона. Возможно, он не подключен или его использует другое приложение."
|
||||
MoveDown "Вниз"
|
||||
MoveToBottom "Переместить вниз"
|
||||
|
@ -35,6 +38,8 @@ Connection.InvalidStream "Неверный stream channel или playpath"
|
|||
|
||||
DeleteConfirm.Title "Удалить выбранное?"
|
||||
|
||||
EndingDelay.TimeLeft "Осталось: $1"
|
||||
|
||||
GlobalSources.DeleteConfirm "Если вы удалите глобальный источник, он будет удален из всех сцен, в которых он используется. Вы уверены, что хотите продолжить?"
|
||||
|
||||
Listbox.Add "Добавить $1"
|
||||
|
@ -47,8 +52,12 @@ Listbox.SetHotkey "Добавить горячую клавишу"
|
|||
MainMenu.File "Ф&айл"
|
||||
MainMenu.Help "(&Р)Помощь"
|
||||
MainMenu.Settings "(&Ы)Настройки"
|
||||
|
||||
MainMenu.File.Exit "(&Ч)Выход"
|
||||
|
||||
MainMenu.Help.Contents "&Содержание"
|
||||
MainMenu.Help.VisitWebsite "Посетить веб-сайт"
|
||||
|
||||
MainMenu.Settings.OpenConfigFolder "&(C)Открыть папку конфигурации"
|
||||
MainMenu.Settings.OpenLogFolder "&(Д)Открыть папку журнала"
|
||||
|
||||
|
@ -64,7 +73,6 @@ MainWindow.StopStream "Закончить"
|
|||
MainWindow.StopTest "Закончить"
|
||||
MainWindow.TestStream "Предпросмотр"
|
||||
|
||||
|
||||
Plugins.Configure "Конфигурация"
|
||||
Plugins.Description "Описание:"
|
||||
Plugins.Filename "Имя файла:"
|
||||
|
@ -94,12 +102,19 @@ Settings.Video "Видео"
|
|||
Settings.Advanced.DisableD3DCompatibilityMode "Отключить совместимость с D3D"
|
||||
Settings.Advanced.DisableD3DCompatibilityModeTooltip "Отключает режим совместимости GPU с D3D"
|
||||
Settings.Advanced.Network "Сеть"
|
||||
Settings.Advanced.UnlockHigherFPS "Разрешить использование 61-120 FPS в настройках видео"
|
||||
Settings.Advanced.UseCBR "Использовать постоянный битрейт"
|
||||
Settings.Advanced.UseHighQualityResampling "Использовать высококачественное преобразование звука"
|
||||
Settings.Advanced.UseHighQualityResamplingTooltip "Когда звуковая подсистема принудительно использует высококачественное преобразование звука, то вместо линейной интерполяции используется синусоидальная. Слегка увеличивает нагрузку на CPU."
|
||||
Settings.Advanced.UseMultithreadedOptimizations "Использовать многопоточную оптимизацию"
|
||||
Settings.Advanced.UseSyncFix "Исправлять Видео / Аудио синхронизацию"
|
||||
Settings.Advanced.UseSyncFixTooltip "В редких случаях у определенных процессоров и/или материнских плат возникают ошибки с таймингами. Использование данного исправления гарантирует, что аудио / видео синхронизация всегда будет корректна, но менее точна чет при правильных таймингах. Не используйте это если не уверенны что у вас есть данная ошибка."
|
||||
Settings.Advanced.VideoEncoderCPUTradeoff "x264 CPU пресет:"
|
||||
Settings.Advanced.VideoEncoderCPUTradeoff "x264 CPU предустановка:"
|
||||
Settings.Advanced.VideoEncoderCPUTradeoffToolTip "Увеличение этого значения уменьшит загрузку процессора в ущерб качеству. Уменьшение этого значения повысит качество, но загрузка процессора увеличится.\r\n\r\nРекомендуется: Very Fast"
|
||||
Settings.Advanced.VideoEncoderSettings "Пользовательские настройки энкодера x264"
|
||||
Settings.Advanced.VideoEncoderSettingsTooltip "Позволяет установить пользовательские настройки энкодера x264. В виде [параметр] = [значение] (например, \"VBV-maxrate = 1000 VBV-BUFSIZE = 1000 \")."
|
||||
Settings.Advanced.ProcessPriority "Приоритет процесса"
|
||||
Settings.Advanced.PresetWarning "Внимание! Изменение настроек х264 может оказывать негативное влияние на качество трансляции и загрузку CPU.\r\n\r\nНе меняйте эти настройки, если вы не имеете полного представления о том, как они влияют на трансляцию.\r\n\r\nОстерегайтесь советов, которые предлагают изменять этот параметр.\r\n\r\nРедко когда может понадобиться менять значение по умолчанию (veryfast).\r\n\r\nУверены что хотите изменить настройки?"
|
||||
|
||||
Settings.Audio.Device "Микрофон:"
|
||||
Settings.Audio.ForceMicMono "Принудительный режим моно:"
|
||||
|
@ -131,8 +146,9 @@ Settings.General.Restart "Для смены языка необходим
|
|||
|
||||
Settings.Publish.AutoReconnect "Автопереподключение:"
|
||||
Settings.Publish.AutoReconnectTimeout "Задержка автопереподключения:"
|
||||
Settings.Publish.ChannelName "Имя канала:"
|
||||
Settings.Publish.ChannelName "Имя канала:"
|
||||
Settings.Publish.DashboardLink "Ссылка на дэшборд (если есть):"
|
||||
Settings.Publish.Delay "Задержка (секунд):"
|
||||
Settings.Publish.Mode "Режим:"
|
||||
Settings.Publish.Password "Пароль (если имеется):"
|
||||
Settings.Publish.Playpath "Play Path/Stream Key (если имеется):"
|
||||
|
@ -152,21 +168,36 @@ Settings.Video.DisableAero "Отключать Aero при запуск
|
|||
Settings.Video.DisableAeroTooltip "Рекомендуется отключить Aero при использовании программного захвата."
|
||||
Settings.Video.Downscale "Масштабировать разрешение:"
|
||||
Settings.Video.DownscaleTooltip "Масштабирования может улучшить качество видео за счет разрешения."
|
||||
Settings.Video.FPS "Кадры в секунду (FPS):"
|
||||
Settings.Video.FPS "Кадров в секунду (FPS):"
|
||||
Settings.Video.Monitor "Монитор:"
|
||||
Settings.Video.Resolution "Базовое разрешение:"
|
||||
|
||||
Sources.BitmapSource "Изображение"
|
||||
Sources.GameCaptureSource "Игровой захват [экспериментальный]"
|
||||
Sources.GlobalSource "Глобальный источник"
|
||||
Sources.SoftwareCaptureSource "Программный источник захвата"
|
||||
Sources.TextSource "Текст"
|
||||
Sources.TransitionSource "Слайд-шоу"
|
||||
|
||||
Sources.BitmapSource.Color "Цвет:"
|
||||
Sources.BitmapSource.Empty "Изображение не найдено. Пожалуйста, найдите и выберите картинку."
|
||||
Sources.BitmapSource.Opacity "Прозрачность:"
|
||||
|
||||
Sources.GameCaptureSource.Application "Приложение:"
|
||||
Sources.GameCaptureSource.PluginDescription "Захватывает кадры напрямую из игр и графических приложений посредством внедрения в приложение и считывания кадров как только они появляются."
|
||||
Sources.GameCaptureSource.PluginName "Плагин захвата игр"
|
||||
Sources.GameCaptureSource.Requires32bit "Эти приложения требуют 32-битной версии OBS для захвата:"
|
||||
Sources.GameCaptureSource.Requires64bit "Эти приложения требуют 64-битной версии OBS для захвата:"
|
||||
Sources.GameCaptureSource.RequiresAdmin "Для захвата этого приложения требуются привилегии Администратора (запустите OBS от имени Администратора):"
|
||||
Sources.GameCaptureSource.StretchToScreen "Растянуть изображение по размеру экрана"
|
||||
|
||||
Sources.SoftwareCaptureSource.Blend "Смешивание (1-100):"
|
||||
Sources.SoftwareCaptureSource.CaptureLayered "Захватывать многослойные окна"
|
||||
Sources.SoftwareCaptureSource.CaptureLayeredTip "Захватывать программы использующие обложки или прозрачные/'слоёные' окна при отключенном Aero. Может вызывать моргание курсора. Используйте только если не получается захватить какую-то конкретную программу."
|
||||
Sources.SoftwareCaptureSource.ColorKey "Color Key"
|
||||
Sources.SoftwareCaptureSource.EntireWindow "Все окно"
|
||||
Sources.SoftwareCaptureSource.InnerWindow "Окно без рамки"
|
||||
Sources.SoftwareCaptureSource.InvertMouseOnClick "Инвертировать цвет курсора при клике"
|
||||
Sources.SoftwareCaptureSource.Monitor "Монитор:"
|
||||
Sources.SoftwareCaptureSource.MonitorCapture "Захват экрана"
|
||||
Sources.SoftwareCaptureSource.MonitorCaptureTooltip "Отключите Aero в настройках видео, чтобы максимизировать значение FPS"
|
||||
|
@ -175,16 +206,40 @@ Sources.SoftwareCaptureSource.Position "Положение:"
|
|||
Sources.SoftwareCaptureSource.Refresh "Обновить"
|
||||
Sources.SoftwareCaptureSource.RegionCapture "Конкретная область"
|
||||
Sources.SoftwareCaptureSource.RegionWindowText "Нажмите клавишу Enter, Esc или щелкните за пределами этого прямоугольника для завершения."
|
||||
Sources.SoftwareCaptureSource.Select "Выбрать"
|
||||
Sources.SoftwareCaptureSource.SelectRegion "Выбрать область"
|
||||
Sources.SoftwareCaptureSource.SelectRegionTooltip "При выборе области захвата изменение размера прямоугольника производится путем захвата за край."
|
||||
Sources.SoftwareCaptureSource.Similarity "Сходство (1-100):"
|
||||
Sources.SoftwareCaptureSource.Size "Размер:"
|
||||
Sources.SoftwareCaptureSource.SpillReduction "Уменьшение охвата:"
|
||||
Sources.SoftwareCaptureSource.UseColorKey "Использовать Color Key:"
|
||||
Sources.SoftwareCaptureSource.Window "Процесс:"
|
||||
Sources.SoftwareCaptureSource.WindowCapture "Захват окна"
|
||||
Sources.SoftwareCaptureSource.WindowCaptureTooltip "Aero может быть включено при использовании только функции захвата окна. Изображение не обновляется, если целевое окно свернуто. Захват с помощью этой функции обычно быстрее, чем захват всего экрана или области экрана. Если Aero включено, окна, перекрывающие целевое окно, не будут видны."
|
||||
Sources.SoftwareCaptureSource.WindowMinimized "Окно минимизировано"
|
||||
Sources.SoftwareCaptureSource.WindowNotFound "Окно не найдено"
|
||||
|
||||
Sources.TextSource.Align "Выровнять:"
|
||||
Sources.TextSource.Bold "Жирный"
|
||||
Sources.TextSource.Center "По центру"
|
||||
Sources.TextSource.EnterText "Свой Текст"
|
||||
Sources.TextSource.FileNotFound "Не удалось открыть файл '$1'"
|
||||
Sources.TextSource.Font "Шрифт:"
|
||||
Sources.TextSource.FontNotFound "Шрифт '$1' не найден"
|
||||
Sources.TextSource.FontSize "Размер шрифта:"
|
||||
Sources.TextSource.Italic "Курсив"
|
||||
Sources.TextSource.Left "Слева"
|
||||
Sources.TextSource.Right "Справа"
|
||||
Sources.TextSource.ScrollSpeed "Скорость прокрутки:"
|
||||
Sources.TextSource.Size "Размер:"
|
||||
Sources.TextSource.Underline "Подчеркнутый"
|
||||
Sources.TextSource.UseCustomExtents "Свои границы текста"
|
||||
Sources.TextSource.UseTextExtents "Свои границы текста"
|
||||
Sources.TextSource.UseTextFromFile "Использовать текст из файла (поддерживается UTF-8)"
|
||||
Sources.TextSource.VerticalScript "Вертикально"
|
||||
Sources.TextSource.Wrap "Перенос"
|
||||
|
||||
Sources.TransitionSource.Bitmaps "Изображения:"
|
||||
Sources.TransitionSource.Empty "Не все картинки будут отображаться"
|
||||
Sources.TransitionSource.FadeInOnly "Только "Fade In":"
|
||||
Sources.TransitionSource.FadeInOnly "Только плавное появление:"
|
||||
Sources.TransitionSource.TimeBetweenBitmaps "Время между показом изображений:"
|
||||
|
|
|
@ -3,17 +3,28 @@ ClassName "Устройство Видео Захвата"
|
|||
DeviceSelection "Выбор устройства"
|
||||
OK "OK"
|
||||
|
||||
DeviceSelection.Config "Настройки"
|
||||
DeviceSelection.Device "Устройство:"
|
||||
DeviceSelection.ExistsInScene "Источник использующийся этим устройством уже существует."using this device already exists."
|
||||
DeviceSelection.ExistsSomewhere "Это устройство используется как источник в одной или несколких сценах."
|
||||
DeviceSelection.FlipImage "Перевернуть Изображение"
|
||||
DeviceSelection.FPS "FPS:"
|
||||
DeviceSelection.GlobalExists "Глобальный источник использующий это устройство уже существует."
|
||||
DeviceSelection.InvalidResolution "Неверное разрешение"
|
||||
DeviceSelection.Refresh "Обновить"
|
||||
DeviceSelection.Resolution "Разрешение:"
|
||||
DeviceSelection.Blend "Смешивание (1-1000):"
|
||||
DeviceSelection.ChromaKey "Chroma Key"
|
||||
DeviceSelection.Color "Цвет:"
|
||||
DeviceSelection.Config "Настройки"
|
||||
DeviceSelection.CustomResolution "Изменить разрешение:"
|
||||
DeviceSelection.Device "Устройство:"
|
||||
DeviceSelection.ExistsInScene "Источник использующийся этим устройством уже существует."using this device already exists."
|
||||
DeviceSelection.ExistsSomewhere "Это устройство используется как источник в одной или нескольких сценах."
|
||||
DeviceSelection.FlipImage "Перевернуть Изображение"
|
||||
DeviceSelection.FlipImageHorizontal "Отразить изображение по горизонтали"
|
||||
DeviceSelection.FPS "FPS:"
|
||||
DeviceSelection.GlobalExists "Глобальный источник использующий это устройство уже существует."
|
||||
DeviceSelection.InvalidResolution "Неверное разрешение"
|
||||
DeviceSelection.Opacity "Прозрачность"
|
||||
DeviceSelection.PreferredType "Использовать привилегированный тип вывода"
|
||||
DeviceSelection.Refresh "Обновить"
|
||||
DeviceSelection.Resolution "Разрешение:"
|
||||
DeviceSelection.Select "Выбор"
|
||||
DeviceSelection.Similarity "Схожесть (1-1000):"
|
||||
DeviceSelection.SpillReduction "Уменьшение охвата (1-1000):"
|
||||
DeviceSelection.UnsupportedResolution "Это устройство не поддерживает такое разрешение"
|
||||
DeviceSelection.UseChromaKey "Использовать Chroma Key"
|
||||
|
||||
Plugin.Description "Этот плагин позволяет добавлять DirectShow видео устройства (вебкамеры, карты захвата, и т.д.) на сцену."
|
||||
Plugin.Name "DirectShow Video Device Plugin"
|
||||
Plugin.Description "Этот плагин позволяет добавлять DirectShow видео устройства (веб-камеры, карты захвата, и т.д.) на сцену."
|
||||
Plugin.Name "Плагин DirectShow видео устройств"
|
||||
|
|
Loading…
Reference in New Issue