DXGI Desktop Duplication API
Re: DXGI Desktop Duplication API
Bist dir da ganz sicher. VS2017 gibt mir bei sizeof(bool) eine 1 wieder.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: DXGI Desktop Duplication API
Hallo Leute,
es kommt darauf an wie BOOL oder bool definiert ist.
Das hier (in der stdbool.h) liefert 1.
So wäre es ein Integer:
typedef int bool;
#define TRUE 1
#define FALSE 0
Kommt halt auf die Definition an.
es kommt darauf an wie BOOL oder bool definiert ist.
Das hier (in der stdbool.h) liefert 1.
Code: Alles auswählen
#include <stdbool.h>
#include <stdio.h>
int main()
{
bool b = 5;
printf("%i\n", sizeof(b));
return 0;
}
typedef int bool;
#define TRUE 1
#define FALSE 0
Kommt halt auf die Definition an.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: DXGI Desktop Duplication API
Hm, den Code muss ich mir mal ansehen. Leider kam ich die letzten 2 Monate zu nichts und daher auch nicht groß bei meinem Programm weiter, wo ich die Funktion ja brauche. Wäre interessant zu sehen wie schnell die Funktion in PB umgesetzt funktioniert im Vergleich zu der externen DLL, die ich bisher für mein Programm benutzen wollte.
Re: DXGI Desktop Duplication API
Jetzt muss ich den Thread doch noch mal ausgraben, kam erst jetzt dazu mir das Ganze mal näher anzusehen und so wie ich es verstanden habe geht der Code so weit bis der Screenshot als 2DTexture im RAM der Grafikkarte abgelegt wurde. Nur wie geht es an der Stelle weiter damit man diese Texture aus dem Video RAM als Bild in PB rein kriegt um es dort weiter verarbeiten zu können?
Hab schon den TE gefragt, aber der kam auch nicht weiter und hat es aufgegeben. Und leider findet man generell wenig zum Thema DX11 in PB und inzwischen sind mir die Ideen ausgegangen wo ich noch nach irgend etwas hilfreichem suchen könnte.
Hier noch mal der Code mit den im Thread zuletzt angesprochenen Korrekturen, läuft soweit fehlerfrei (dxgi.lib und d3d11.lib findet man im Windows 10 SDK):
Hab schon den TE gefragt, aber der kam auch nicht weiter und hat es aufgegeben. Und leider findet man generell wenig zum Thema DX11 in PB und inzwischen sind mir die Ideen ausgegangen wo ich noch nach irgend etwas hilfreichem suchen könnte.
Hier noch mal der Code mit den im Thread zuletzt angesprochenen Korrekturen, läuft soweit fehlerfrei (dxgi.lib und d3d11.lib findet man im Windows 10 SDK):
Code: Alles auswählen
;-----------------------
;DXGI - Screen Capture
;Author: mijikai
;Version: DRAFT 12
;PureBasic v.5.62 / x64
;Windows 10 / x64
;-----------------------
Import "dxgi.lib"
CreateDXGIFactory(uuid.i,*pFactory)
CreateDXGIFactory1(riid.i,*ppFactory)
EndImport
Import "d3d11.lib"
D3D11CreateDevice(*pAdapter,DriverType.i,Software.i,Flags.i,*pFeatureLevels,FeatureLevels.i,SDKVersion.i,*ppDevice,*pFeatureLevel,*ppImmediateContext)
EndImport
Interface IDXGIObject Extends IUnknown;uuid( aec22fb8-76f3-4639-9be0-28eb43a67a2e )
SetPrivateData(Name.i,DataSize.i,pData)
SetPrivateDataInterface(Name.i,*pUnknown)
GetPrivateData(Name.i,*pDataSize,*pData)
GetParent(riid,*ppParent)
EndInterface
Interface IDXGIDevice Extends IDXGIObject
GetAdapter(*pAdapter)
CreateSurface(*pDesc,NumSurfaces.i,Usage.i,*pSharedResource,*ppSurface)
QueryResourceResidency(*ppResources,*pResidencyStatus,NumResources.i)
SetGPUThreadPriority(Priority.i)
GetGPUThreadPriority(*pPriority)
EndInterface
Interface IDXGIOutput Extends IDXGIObject;uuid( ae02eedb-c735-4690-8d52-5a8dc20213aa )
GetDesc(*pDesc)
GetDisplayModeList(EnumFormat.i,Flags.i,*pNumModes,*pDesc)
FindClosestMatchingMode(*pModeToMatch,*pClosestMatch,*pConcernedDevice)
WaitForVBlank()
TakeOwnership(*pDevice,Exclusive.b)
ReleaseOwnership()
GetGammaControlCapabilities(*pGammaCaps)
SetGammaControl(*pArray)
GetGammaControl(*pArray)
SetDisplaySurface(*pScanoutSurface)
GetDisplaySurfaceData(*pDestination)
GetFrameStatistics(*pStats)
EndInterface
Interface IDXGIOutput1 Extends IDXGIOutput;uuid( 00cddea8-939b-4b83-a340-a685226666cc )
GetDisplayModeList1(EnumFormat.i,Flags.i,*pNumModes,*pDesc)
FindClosestMatchingMode1(*pModeToMatch,*pClosestMatch,*pConcernedDevice)
GetDisplaySurfaceData1(*pDestination)
DuplicateOutput(*pDevice,*ppOutputDuplication)
EndInterface
Interface IDXGIAdapter Extends IDXGIObject;uuid( 2411e7e1-12ac-4ccf-bd14-9798e8534dc0 )
EnumOutputs(Output.i,*ppOutput)
GetDesc(*pDesc )
CheckInterfaceSupport(InterfaceName.i,*pUMDVersion)
EndInterface
Interface IDXGIAdapter1 Extends IDXGIAdapter;uuid( 29038f61-3839-4626-91fd-086879011a05 )
GetDesc1(*pDesc )
EndInterface
Interface IDXGIOutputDuplication Extends IDXGIObject
GetDesc(*pDesc)
AcquireNextFrame(TimeoutInMilliseconds.i,*pFrameInfo,*ppDesktopResource)
GetFrameDirtyRects(DirtyRectsBufferSize.i,*pDirtyRectsBuffer,*pDirtyRectsBufferSizeRequired)
GetFrameMoveRects(MoveRectsBufferSize.i,*pMoveRectBuffer,*pMoveRectsBufferSizeRequired)
GetFramePointerShape(PointerShapeBufferSize.i,*pPointerShapeBuffer,*pPointerShapeBufferSizeRequired,*pPointerShapeInfo)
MapDesktopSurface(*pLockedRect)
UnMapDesktopSurface()
ReleaseFrame()
EndInterface
Interface IDXGIFactory Extends IDXGIObject;uuid( 7b7166ec-21c7-44ae-b21a-c9ae321ae369 )
EnumAdapters(Adapter.i,*ppAdapter)
MakeWindowAssociation(WindowHandle.i,Flags.i)
GetWindowAssociation(*pWindowHandle)
CreateSwapChain(*pDevice,*pDesc,*ppSwapChain)
CreateSoftwareAdapter(hModule.i,*ppAdapter)
EndInterface
Interface IDXGIFactory1 Extends IDXGIFactory;uuid( 770aae78-f26f-4dba-a829-253c83d1b387 )
EnumAdapters1(Adapter.i,*ppAdapter )
IsCurrent()
EndInterface
Interface ID3D11Texture2D
QueryInterface(a.i, b.i)
AddRef()
Release()
GetDevice(a.i)
GetPrivateData(a.i, b.i, c.i)
SetPrivateData(a.i, b.i, c.i)
SetPrivateDataInterface(a.i, b.i)
GetType(a.i)
SetEvictionPriority(a.i)
GetEvictionPriority()
GetDesc(a.i)
EndInterface
Interface ID3D11Device
QueryInterface(a.i,b.i)
AddRef()
Release()
CreateBuffer(a.i,b.i,c.i)
CreateTexture1D(a.i,b.i,c.i)
CreateTexture2D(a.i,b.i,c.i)
CreateTexture3D(a.i,b.i,c.i)
CreateShaderResourceView(a.i,b.i,c.i)
CreateUnorderedAccessView(a.i,b.i,c.i)
CreateRenderTargetView(a.i,b.i,c.i)
CreateDepthStencilView(a.i,b.i,c.i)
CreateInputLayout(a.i,b.i,c.i,d.i,e.i)
CreateVertexShader(a.i,b.i,c.i,d.i)
CreateGeometryShader(a.i,b.i,c.i,d.i)
CreateGeometryShaderWithStreamOutput(a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i,i.i,j.i,k.i)
CreatePixelShader(a.i,b.i,c.i,d.i)
CreateHullShader(a.i,b.i,c.i,d.i)
CreateDomainShader(a.i,b.i,c.i,d.i)
CreateComputeShader(a.i,b.i,c.i,d.i)
CreateClassLinkage(a.i)
CreateBlendState(a.i,b.i)
CreateDepthStencilState(a.i,b.i)
CreateRasterizerState(a.i,b.i)
CreateSamplerState(a.i,b.i)
CreateQuery(a.i,b.i)
CreatePredicate(a.i,b.i)
CreateCounter(a.i,b.i)
CreateDeferredContext(a.i,b.i)
OpenSharedResource(a.i,b.i,c.i)
CheckFormatSupport(a.i,b.i)
CheckMultisampleQualityLevels(a.i,b.i,c.i)
CheckCounterInfo(a.i)
CheckCounter(a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i,i.i)
CheckFeatureSupport(a.i,b.i,c.i)
GetPrivateData(a.i,b.i,c.i)
SetPrivateData(a.i,b.i,c.i)
SetPrivateDataInterface(a.i,b.i)
GetFeatureLevel()
GetCreationFlags()
GetDeviceRemovedReason()
GetImmediateContext(a.i)
SetExceptionMode(a.i)
GetExceptionMode()
EndInterface
Interface ID3D11DeviceChild Extends IUnknown
GetDevice(a.i)
GetPrivateData(a.i,b.i,c.i)
SetPrivateData(a.i,b.i,c.i)
SetPrivateDataInterface(a.i,b.i)
EndInterface
Interface ID3D11DeviceContext Extends ID3D11DeviceChild
VSSetConstantBuffers(a.i,b.i,c.i)
PSSetShaderResources(a.i,b.i,c.i)
PSSetShader(a.i,b.i,c.i)
PSSetSamplers(a.i,b.i,c.i)
VSSetShader(a.i,b.i,c.i)
DrawIndexed(a.i,b.i,c.i)
Draw(a.i,b.i)
Map_(a.i,b.i,c.i,d.i,e.i)
Unmap(a.i,b.i)
PSSetConstantBuffers(a.i,b.i,c.i)
IASetInputLayout(a.i)
IASetVertexBuffers(a.i,b.i,c.i,d.i,e.i)
IASetIndexBuffer(a.i,b.i,c.i)
DrawIndexedInstanced(a.i,b.i,c.i,d.i,e.i)
DrawInstanced(a.i,b.i,c.i,d.i)
GSSetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
GSSetShader(a.i,b.i,c.i)
IASetPrimitiveTopology(a.i)
VSSetShaderResources(a.i,b.i,c.i,d.i,e.i)
VSSetSamplers(a.i,b.i,c.i,d.i,e.i)
Begin(a.i)
End_(a.i)
GetData(a.i,b.i,c.i,d.i)
SetPredication(a.i,b.i)
GSSetShaderResources(a.i,b.i,c.i,d.i,e.i)
GSSetSamplers(a.i,b.i,c.i,d.i,e.i)
OMSetRenderTargets(a.i,b.i,c.i)
OMSetRenderTargetsAndUnorderedAccessViews(a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i)
OMSetBlendState(a.i,b.i,c.i)
OMSetDepthStencilState(a.i,b.i)
SOSetTargets(a.i,b.i,c.i,d.i)
DrawAuto()
DrawIndexedInstancedIndirect(a.i,b.i)
DrawInstancedIndirect(a.i,b.i)
Dispatch(a.i,b.i,c.i)
DispatchIndirect(a.i,b.i)
RSSetState(a.i)
RSSetViewports(a.i,b.i)
RSSetScissorRects(a.i,b.i,c.i)
CopySubresourceRegion(a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i)
CopyResource(a.i,b.i)
UpdateSubresource(a.i,b.i,c.i,d.i,e.i,f.i)
CopyStructureCount(a.i,b.i,c.i)
ClearRenderTargetView(a.i,b.i)
ClearUnorderedAccessViewUint(a.i,b.i)
ClearUnorderedAccessViewFloat(a.i,b.i)
ClearDepthStencilView(a.i,b.i,c.f,d.i)
GenerateMips(a.i)
SetResourceMinLOD(a.i,b.i)
GetResourceMinLOD(a.i)
ResolveSubresource(a.i,b.i,c.i,d.i,e.i)
ExecuteCommandList(a.i,b.i)
HSSetShaderResources(a.i,b.i,c.i,d.i,e.i)
HSSetShader(a.i,b.i,c.i)
HSSetSamplers(a.i,b.i,c.i,d.i,e.i)
HSSetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
DSSetShaderResources(a.i,b.i,c.i,d.i,e.i)
DSSetShader(a.i,b.i,c.i)
DSSetSamplers(a.i,b.i,c.i,d.i,e.i)
DSSetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
CSSetShaderResources(a.i,b.i,c.i,d.i,e.i)
CSSetUnorderedAccessViews(a.i,b.i,c.i,d.i,e.i,f.i)
CSSetShader(a.i,b.i,c.i)
CSSetSamplers(a.i,b.i,c.i,d.i,e.i)
CSSetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
VSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
PSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
PSGetShader(a.i,b.i,c.i)
PSGetSamplers(a.i,b.i,c.i,d.i,e.i)
VSGetShader(a.i,b.i,c.i)
PSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
IAGetInputLayout(a.i)
IAGetVertexBuffers(a.i,b.i,c.i,d.i,e.i,f.i,g.i)
IAGetIndexBuffer(a.i,b.i,c.i)
GSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
GSGetShader(a.i,b.i,c.i)
IAGetPrimitiveTopology(a.i)
VSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
VSGetSamplers(a.i,b.i,c.i,d.i,e.i)
GetPredication(a.i,b.i)
GSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
GSGetSamplers(a.i,b.i,c.i,d.i,e.i)
OMGetRenderTargets(a.i,b.i,c.i,d.i)
OMGetRenderTargetsAndUnorderedAccessViews(a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i,i.i)
OMGetBlendState(a.i,b.i,c.i)
OMGetDepthStencilState(a.i,b.i)
SOGetTargets(a.i,b.i,c.i)
RSGetState(a.i)
RSGetViewports(a.i,b.i)
RSGetScissorRects(a.i,b.i)
HSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
HSGetShader(a.i,b.i,c.i)
HSGetSamplers(a.i,b.i,c.i,d.i,e.i)
HSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
DSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
DSGetShader(a.i,b.i,c.i)
DSGetSamplers(a.i,b.i,c.i,d.i,e.i)
DSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
CSGetShaderResources(a.i,b.i,c.i,d.i,e.i)
CSGetUnorderedAccessViews(a.i,b.i,c.i,d.i,e.i)
CSGetShader(a.i,b.i,c.i)
CSGetSamplers(a.i,b.i,c.i,d.i,e.i)
CSGetConstantBuffers(a.i,b.i,c.i,d.i,e.i)
ClearState()
Flush()
GetType()
GetContextFlags()
FinishCommandList(a.i,b.i)
EndInterface
Structure DXGI_OUTPUT_DESC
DeviceName.s{32}
DesktopCoordinates.RECT
AttachedToDesktop.l
Rotation.l
Monitor.i
EndStructure
Enumeration DXGI_MODE_ROTATION
#DXGI_MODE_ROTATION_UNSPECIFIED
#DXGI_MODE_ROTATION_IDENTITY
#DXGI_MODE_ROTATION_ROTATE90
#DXGI_MODE_ROTATION_ROTATE180
#DXGI_MODE_ROTATION_ROTATE270
EndEnumeration
#DXGI_ERROR_NOT_FOUND = $887A0002
#D3D_DRIVER_TYPE_UNKNOWN = 0
#D3D11_SDK_VERSION = 7
#D3D_FEATURE_LEVEL_11_0 = $B000
#D3D_FEATURE_LEVEL_9_1 = $9100
#DXGI_FORMAT_B8G8R8A8_UNORM = 87
#D3D11_USAGE_STAGING = 3
#D3D11_CPU_ACCESS_READ = $20000
Structure DXGI_SAMPLE_DESC
Count.l
Quality.l
EndStructure
Structure D3D11_TEXTURE2D_DESC
Width.l
Height.l
MipLevels.l
ArraySize.l
Format.l
SampleDesc.DXGI_SAMPLE_DESC
Usage.l
BindFlags.l
CPUAccessFlags.l
MiscFlags.l
EndStructure
Structure DXGI_OUTPUT_STRUCT
*DXGIOutput.IDXGIOutput
*DXGIOutput1.IDXGIOutput1
*D3D11Device.ID3D11Device
*D3D11DeviceContext.ID3D11DeviceContext
*DXGIOutputDuplication.IDXGIOutputDuplication
*D3D11Texture2D.ID3D11Texture2D
Description.DXGI_OUTPUT_DESC
Texture.D3D11_TEXTURE2D_DESC
TextureS.D3D11_TEXTURE2D_DESC
EndStructure
Structure DXGI_ADAPTER_STRUCT
*DXGIAdapter1.IDXGIAdapter1
EndStructure
Structure DXGI_STRUCT
*DXGIFactory1.IDXGIFactory1
List Adapter.DXGI_ADAPTER_STRUCT()
List Output.DXGI_OUTPUT_STRUCT()
EndStructure
Global DXGI.DXGI_STRUCT
Procedure.i dxgiRelease()
With DXGI
ForEach \Output()
If \Output()\D3D11Texture2D
\Output()\D3D11Texture2D\Release()
EndIf
If \Output()\DXGIOutputDuplication
\Output()\DXGIOutputDuplication\Release()
EndIf
If \Output()\D3D11DeviceContext
\Output()\D3D11DeviceContext\Release()
EndIf
If \Output()\D3D11Device
\Output()\D3D11Device\Release()
EndIf
If \Output()\DXGIOutput1
\Output()\DXGIOutput1\Release()
EndIf
If \Output()\DXGIOutput
\Output()\DXGIOutput\Release()
EndIf
Next
ForEach \Adapter()
If \Adapter()\DXGIAdapter1
\Adapter()\DXGIAdapter1\Release()
EndIf
Next
ClearList(\Output())
ClearList(\Adapter())
If \DXGIFactory1
\DXGIFactory1\Release()
\DXGIFactory1 = #Null
EndIf
EndWith
EndProcedure
Procedure.i dxgiInit()
Protected Index.i
Protected *Adapter
Protected *Output.IDXGIOutput1
Protected *Device.ID3D11Device
Protected *DeviceContext.ID3D11DeviceContext
Protected Description.DXGI_OUTPUT_DESC
Protected FeatureLevel.i
Protected Result.i
FeatureLevel = #D3D_FEATURE_LEVEL_11_0
With DXGI
dxgiRelease()
If CreateDXGIFactory1(?UUID_IDXGIFactory1,@\DXGIFactory1) = #S_OK
While Not \DXGIFactory1\EnumAdapters1(Index,@*Adapter) = #DXGI_ERROR_NOT_FOUND
If AddElement(\Adapter())
\Adapter()\DXGIAdapter1 = *Adapter
EndIf
Index + 1
Wend
ForEach \Adapter()
If \Adapter()\DXGIAdapter1
Index = 0
While Not \Adapter()\DXGIAdapter1\EnumOutputs(Index,@*Output) = #DXGI_ERROR_NOT_FOUND
If *Output\GetDesc(@Description) = #S_OK
If Description\AttachedToDesktop;IS THE OUTPUT RELEVANT?
If D3D11CreateDevice(\Adapter()\DXGIAdapter1,#D3D_DRIVER_TYPE_UNKNOWN,#Null,#Null,#Null,#Null,#D3D11_SDK_VERSION,@*Device,@FeatureLevel,@*DeviceContext) = #S_OK
If AddElement(\Output())
\Output()\DXGIOutput = *Output
\Output()\D3D11Device = *Device
\Output()\D3D11DeviceContext = *DeviceContext
If \Output()\DXGIOutput\QueryInterface(?UUID_IDXGIOutput1,@\Output()\DXGIOutput1) = #S_OK
*Output = #Null
;--------------
If \Output()\DXGIOutput1\DuplicateOutput(\Output()\D3D11Device,@\Output()\DXGIOutputDuplication) = #S_OK
CopyMemory(@Description,@\Output()\Description,SizeOf(DXGI_OUTPUT_DESC))
\Output()\Texture\Width = \Output()\Description\DesktopCoordinates\right
\Output()\Texture\Height = \Output()\Description\DesktopCoordinates\bottom
\Output()\Texture\MipLevels = 1
\Output()\Texture\ArraySize = 1
\Output()\Texture\Format = #DXGI_FORMAT_B8G8R8A8_UNORM
\Output()\Texture\SampleDesc\Count = 1
\Output()\Texture\SampleDesc\Quality = 0
\Output()\Texture\Usage = #D3D11_USAGE_STAGING
\Output()\Texture\BindFlags = 0
\Output()\Texture\CPUAccessFlags = #D3D11_CPU_ACCESS_READ
\Output()\Texture\MiscFlags = 0
Debug \Output()\Texture\Width
Debug \Output()\Texture\Height
Debug \Output()\D3D11Device\CreateTexture2D(@\Output()\Texture,#Null,@\Output()\D3D11Texture2D);<- gibt #E_INVALIDARG zurück!?
Debug \Output()\D3D11Texture2D
;---------
Result + 1
EndIf
;--------------
Else
*Device\Release()
*DeviceContext\Release()
DeleteElement(\Output())
EndIf
Else
*Device\Release()
*DeviceContext\Release()
EndIf
EndIf
EndIf
EndIf
If *Output
*Output\Release()
EndIf
Index + 1
Wend
EndIf
Next
EndIf
If Not Result
dxgiRelease()
EndIf
ProcedureReturn Result
EndWith
UUID_IDXGIFactory:
!dd 0x7b7166ec
!dw 0x21c7,0x44ae
!db 0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69
UUID_IDXGIFactory1:
!dd 0x770aae78
!dw 0xf26f,0x4dba
!db 0xa8,0x29,0x25,0x3c,0x83,0xd1,0xb3,0x87
UUID_IDXGIOutput1:
!dd 0x00cddea8
!dw 0x939b,0x4b83
!db 0xa3,0x40,0xa6,0x85,0x22,0x66,0x66,0xcc
EndProcedure
Debug dxgiInit()
Re: DXGI Desktop Duplication API
Achja, Linux ist in solchen Dingen einfach toll.
"OBS" ist das genialste Screencapture-Programm was ich unter Linux kenne.
Bei Window (DirectX 11 / DXGI Desktop Duplication API) kann ich leider auch nicht weiterhelfen.
Das einzig uncoole unter Linux sind die nicht umgehbaren Kopierschutzverfahren bei DVD/etc.
(Was ein normales abspielen einer handelsüblichen DVD unter Linux unmöglich macht.)
"OBS" ist das genialste Screencapture-Programm was ich unter Linux kenne.
Bei Window (DirectX 11 / DXGI Desktop Duplication API) kann ich leider auch nicht weiterhelfen.
Das einzig uncoole unter Linux sind die nicht umgehbaren Kopierschutzverfahren bei DVD/etc.
(Was ein normales abspielen einer handelsüblichen DVD unter Linux unmöglich macht.)
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: DXGI Desktop Duplication API
Nutze ich unter Windows auch sehr gerne. Viel besser, als andere wie Fraps oder was es noch so gab.ccode_new hat geschrieben:"OBS" ist das genialste Screencapture-Programm was ich unter Linux kenne.
Re: DXGI Desktop Duplication API
Und rate mal was OBS unter Windows nutzt... richtig, die Desktop Duplication API.
Das war aber nicht das Thema hier. Im Grunde ist der Code soweit ja auch fertig was die Desktop Duplication API betrifft, wenn alles korrekt ist sollte der Desktop Inhalt bereits als Texture im Grafikspeicher der Grafikkarte liegen. Aber wie kriegt man es da nun raus in den normalen Speicher um es als PB Image weiter verwenden zu können?
Könnte da das DX11 Subsystem in PB helfen? Mit DX Kram kenne ich mich halt so gar nicht aus, auch weil ich kein C++, C etc. kann.
Kommt man nun von PB aus direkt da dran oder muss da noch mehr DX Code Kram rein?
Wenn ich wenigstens irgend einen Ansatz hätte...
Das war aber nicht das Thema hier. Im Grunde ist der Code soweit ja auch fertig was die Desktop Duplication API betrifft, wenn alles korrekt ist sollte der Desktop Inhalt bereits als Texture im Grafikspeicher der Grafikkarte liegen. Aber wie kriegt man es da nun raus in den normalen Speicher um es als PB Image weiter verwenden zu können?
Könnte da das DX11 Subsystem in PB helfen? Mit DX Kram kenne ich mich halt so gar nicht aus, auch weil ich kein C++, C etc. kann.
Kommt man nun von PB aus direkt da dran oder muss da noch mehr DX Code Kram rein?
Wenn ich wenigstens irgend einen Ansatz hätte...