Infos über die Internen funktionen der subsysteme?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Infos über die Internen funktionen der subsysteme?

Beitrag von Nero »

Hiho, hab da mal eine frage.

Mit dem PBLIBTool kann man ja schön die Internen Funktionen der PB libs einsehen.
Hab mir auch mal eine Funktion importiert nur leider spukt er beim aufrufen einen IMA aus, denke mal da fehlt mir nen Parameter nur leider werden diese nicht
im PBLIBTool angezeigt. Dort werden nur die angezeigt die es auch als PB Befehl gibt.
Gibt es da irgend eine Möglichkeit mehr Infos über diese Funktionen zu bekommen?

Mfg Nero
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von ts-soft »

Welche Infos fehlen Dir? Die parametertypen und anzahl oder bezieht sich Deine
Frage doch auf SubSysteme.

Bei den parametertypen und anzahl kann Dir nur Fred helfen, weil, das läßt sich aus normalen
statischen Libs im allg. nicht ermitteln.

Ansonsten, SubSysteme sind einfach Ordner, in denen der Linker zuerst nach hinzuzulinkenden
Funktionen sucht, bevor er den Standard-Ordner benutzt. Simple und effektiv.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von Nero »

Die sache ist die ich hab mir mal angeschaut was im DX11 subsystem für funktionen drinn sind und da gibt es diese beiden
_PB_Screen_Device(), _PB_Screen_DeviceContext und ein paar andere.
Diese dürften warscheinlich (kann mich auch irren) die Pointer zum ID3D11Device und ID3D11DeviceContext zurückgeben (die braucht man fast überall) damit kann man praktisch die kontrolle vom Screen übernehmen.
Wollte ein bischen rumspielen und schauen ob man eigene shader laden kann oder den Z buffer aktievieren sodas nicht alles 2D gerendert wird.

Nur PB_Screen_Device() erzeugt mal gleich nen error >:) kann mir da nur vorstellen das parameter fehlen oder die funktion irgendwie geschützt ist.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von Nero »

Nach langer suche hab ich im englischen Forum was gefunden.
Muste nur eine CompilerIf für 64bit hinzufügen

Code: Alles auswählen

  Procedure GetD3D11Device(*D3D11Device.ID3D11Device)
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86    
      !extrn _PB_Screen_Device
      !MOV EAX,DWord [_PB_Screen_Device]  
    CompilerElse
      !extrn PB_Screen_Device
      !MOV EAX,DWord [PB_Screen_Device]  
    CompilerEndIf    
    !MOV DWord [p_D3D11Device],EAX     
EndProcedure
Das scheint zu funktionieren hab es nur kurz mit device\GetFeatureLevel() getestet was ein korektes ergebnis geliefert hat.
Was mich allerding wundert ist es funktioniert unter 64Bit obwohl DWord. Bei 64Bit sollte der pointer doch 8Byte lang sein und nicht nur 4? (kenn mich mit asm nicht aus)

Und dann hab ich noch eine frage, kann mir jemand sagen wieso das nicht über Import .... EndImport funktioniert?
Der asm code mach ja auch nix anderes als den rückgabewert von PB_Screen_Device() in dieses EAX register zu schreiben und dann in die pointer variable?

Mfg Nero
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von ts-soft »

Windows vergibt nach Möglichkeit zuerst Handles, die im unterem Speicherbereich passen, es sei denn, dies wurde in der
Registry verändert. Somit funktioniert Dein Code wohl nicht immer.
Als Register RAX nehmen und DWORD durch, ich denke mal, QWORD ersetzen (falls es dies gibt).

Am besten auf Antwort von jemanden warten, der ASM kann.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von Nero »

Werde den ASM Code ändern falls sich wer meldet der ahnung von hat ^_^

Aber habe es eben mal Getestet und FlipScreen & ClearScreen durch eigenen code ersetzt funktioniert echt prima.
Hoffe es funktioniert auch wen der asm code mit DWORD ist. (bei mir läufts)

Edit: Habs doch auf RAX & QWord korigiert

Code: Alles auswählen

Interface IDXGISwapChain
  QueryInterface(a.i, b.i)
  AddRef()
  Release()
  SetPrivateData(a.i, b.i, c.i)
  SetPrivateDataInterface(a.i, b.i)
  GetPrivateData(a.i, b.i, c.i)
  GetParent(a.i, b.i)
  GetDevice(a.i, b.i)
  Present(a.i, b.i)
  GetBuffer(a.i, b.i, c.i)
  SetFullscreenState(a.i, b.i)
  GetFullscreenState(a.i, b.i)
  GetDesc(a.i)
  ResizeBuffers(a.i, b.i, c.i, d.i, e.i)
  ResizeTarget(a.i)
  GetContainingOutput(a.i)
  GetFrameStatistics(a.i)
  GetLastPresentCount(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

Interface ID3D11RenderTargetView
  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)
  GetResource(a.i)
  GetDesc(a.i)
EndInterface

Interface ID3D11DepthStencilView
  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)
  GetResource(a.i)
  GetDesc(a.i)
EndInterface



#D3D11_CLEAR_DEPTH     = $1
#D3D11_CLEAR_STENCIL   = $2

;- D3DXCOLOR
Structure D3DXCOLOR
  r.f
  g.f
  b.f
  a.f
EndStructure

If Not InitSprite()
    MessageRequester("Error", "Can't open screen & sprite environment!", 0)
    End  
EndIf  

  If OpenWindow(0, 0, 0, 160, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)    
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf    
  Else    
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End    
    EndIf  
  EndIf    
  direction = 2  
  
  
Procedure GetD3D11SwapChain(*IDXSwapChain)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86    
    !extrn _PB_Screen_SwapChain
    !MOV EAX,DWord [_PB_Screen_SwapChain] 
    !MOV DWord [p_IDXSwapChain],EAX 
  CompilerElse
    !extrn PB_Screen_SwapChain
    !MOV RAX,QWord [PB_Screen_SwapChain]
    !MOV QWord [p_IDXSwapChain],RAX 
  CompilerEndIf           
EndProcedure  
  

Procedure GetD3D11Device(*D3D11Device)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_Device
    !MOV EAX,DWord [_PB_Screen_Device] 
    !MOV DWord [p_D3D11Device],EAX
  CompilerElse
    !extrn PB_Screen_Device
    !MOV RAX,QWord [PB_Screen_Device] 
    !MOV QWord [p_D3D11Device],RAX
  CompilerEndIf   
        
EndProcedure

Procedure GetD3D11DeviceContext(*D3D11DeviceContext)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_DeviceContext
    !MOV EAX,DWord [_PB_Screen_DeviceContext] 
    !MOV DWord [p_D3D11DeviceContext],EAX 
  CompilerElse
    !extrn PB_Screen_DeviceContext
    !MOV RAX,QWord [PB_Screen_DeviceContext] 
    !MOV QWord [p_D3D11DeviceContext],RAX 
  CompilerEndIf   
       
EndProcedure

Procedure GetD3D11RenderTargetView(*D3D11RenderTargetView)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_RenderTargetView
    !MOV EAX,DWord [_PB_Screen_RenderTargetView]
    !MOV DWord [p_D3D11RenderTargetView],EAX 
  CompilerElse
    !extrn PB_Screen_RenderTargetView
    !MOV RAX,QWord [PB_Screen_RenderTargetView] 
    !MOV QWord [p_D3D11RenderTargetView],RAX 
  CompilerEndIf   
       
EndProcedure

Procedure GetD3D11DepthStencilView(*D3D11DepthStencilView)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_DepthStencilView
    !MOV EAX,DWord [_PB_Screen_DepthStencilView] 
    !MOV DWord [p_D3D11DepthStencilView],EAX 
  CompilerElse
    !extrn PB_Screen_DepthStencilView
    !MOV RAX,QWord [PB_Screen_DepthStencilView] 
    !MOV QWord [p_D3D11DepthStencilView],RAX 
  CompilerEndIf   
       
EndProcedure


Define *IDXSwapChain.IDXGISwapChain
Define *D3D11Device.ID3D11Device 
Define *D3D11DeviceContext.ID3D11DeviceContext
Define *D3D11RenderTargetView.ID3D11RenderTargetView 
Define *D3D11DepthStencilView.ID3D11DepthStencilView


GetD3D11SwapChain(*IDXSwapChain)
GetD3D11Device(*D3D11Device)
GetD3D11DeviceContext(*D3D11DeviceContext)
GetD3D11RenderTargetView(*D3D11RenderTargetView)
GetD3D11DepthStencilView(*D3D11DepthStencilView)  


Define Color.D3DXCOLOR
Color\r = 1
Color\g = 148 / 255
Color\b = 81 / 255
Color\a = 0
 
Repeat
    
  Event       = WindowEvent() 
  
  *IDXSwapChain\Present(1, 0)   

  
  *D3D11DeviceContext\ClearRenderTargetView(*D3D11RenderTargetView, Color) 
  *D3D11DeviceContext\ClearDepthStencilView(*D3D11DepthStencilView, #D3D11_CLEAR_DEPTH | #D3D11_CLEAR_STENCIL, 1.0, 0)     
  
  Select Event
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
  DisplaySprite(0, x, x)
  x + direction
  If x > 140 : direction = -2 : EndIf
  If x < 0   : direction =  2 : EndIf      
  Delay(1)        
Until  Event =  #PB_Event_CloseWindow
 
Zuletzt geändert von Nero am 27.08.2013 16:58, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von ts-soft »

Warum nutzt Du nicht einfach Import? Dann wäre das ASM zeuchz doch überflüssig.
Ich bin im moment nicht zu Hause und habe auch nur Linux zur Verfügung, sonst
hätte ich selbst mal getested.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Infos über die Internen funktionen der subsysteme?

Beitrag von Nero »

Das ist ja mein Problem wen ich die funktionen über Import hole dann bekomme ich ne Compiler error. :bluescreen:
Edit: ok mit beta 14 kommt ne Polink "Unresolved external Symbol" vorher wars es ein IMA

Hab den gram aber doch mal angepast EAX für 32Bit & RAX für 64Bit

Code: Alles auswählen

Procedure GetD3D11SwapChain(*IDXSwapChain)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86    
    !extrn _PB_Screen_SwapChain
    !MOV EAX,DWord [_PB_Screen_SwapChain] 
    !MOV DWord [p_IDXSwapChain],EAX 
  CompilerElse
    !extrn PB_Screen_SwapChain
    !MOV RAX,QWord [PB_Screen_SwapChain]
    !MOV QWord [p_IDXSwapChain],RAX 
  CompilerEndIf          
EndProcedure  
  

Procedure GetD3D11Device(*D3D11Device)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_Device
    !MOV EAX,DWord [_PB_Screen_Device] 
    !MOV DWord [p_D3D11Device],EAX
  CompilerElse
    !extrn PB_Screen_Device
    !MOV RAX,QWord [PB_Screen_Device] 
    !MOV QWord [p_D3D11Device],RAX
  CompilerEndIf        
EndProcedure

Procedure GetD3D11DeviceContext(*D3D11DeviceContext)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_DeviceContext
    !MOV EAX,DWord [_PB_Screen_DeviceContext] 
    !MOV DWord [p_D3D11DeviceContext],EAX 
  CompilerElse
    !extrn PB_Screen_DeviceContext
    !MOV RAX,QWord [PB_Screen_DeviceContext] 
    !MOV QWord [p_D3D11DeviceContext],RAX 
  CompilerEndIf          
EndProcedure

Procedure GetD3D11RenderTargetView(*D3D11RenderTargetView)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_RenderTargetView
    !MOV EAX,DWord [_PB_Screen_RenderTargetView]
    !MOV DWord [p_D3D11RenderTargetView],EAX 
  CompilerElse
    !extrn PB_Screen_RenderTargetView
    !MOV RAX,QWord [PB_Screen_RenderTargetView] 
    !MOV QWord [p_D3D11RenderTargetView],RAX 
  CompilerEndIf          
EndProcedure

Procedure GetD3D11DepthStencilView(*D3D11DepthStencilView)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86   
    !extrn _PB_Screen_DepthStencilView
    !MOV EAX,DWord [_PB_Screen_DepthStencilView] 
    !MOV DWord [p_D3D11DepthStencilView],EAX 
  CompilerElse
    !extrn PB_Screen_DepthStencilView
    !MOV RAX,QWord [PB_Screen_DepthStencilView] 
    !MOV QWord [p_D3D11DepthStencilView],RAX 
  CompilerEndIf         
EndProcedure
Antworten