DXGI Desktop Duplication API

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: DXGI Desktop Duplication API

Beitrag von _JON_ »

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
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DXGI Desktop Duplication API

Beitrag von ccode_new »

Hallo Leute,

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;
}
So wäre es ein Integer:

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
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: DXGI Desktop Duplication API

Beitrag von Hoto »

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.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: DXGI Desktop Duplication API

Beitrag von Hoto »

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):

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()
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DXGI Desktop Duplication API

Beitrag von ccode_new »

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.)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: DXGI Desktop Duplication API

Beitrag von RSBasic »

ccode_new hat geschrieben:"OBS" ist das genialste Screencapture-Programm was ich unter Linux kenne.
Nutze ich unter Windows auch sehr gerne. Viel besser, als andere wie Fraps oder was es noch so gab.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: DXGI Desktop Duplication API

Beitrag von Hoto »

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...
Antworten