d3d9.dll falscher Rückgabewert bei x64 System

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von _JON_ »

Mijikai hat geschrieben: Sieht so aus als ob PB GetProcAddress_() immer falsch aufruft...

-> Fix:

Code: Alles auswählen

Import "kernel32.lib"
  GetProcAddress(ModuleHandle.i,FunctionName.p-Ascii)
EndImport
Damit wurden dann aber keine "ordinals" mehr gehen.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von Mijikai »

RSBasic hat geschrieben: Ich habe das nicht so verfolgt, was für Fehler gibt es denn derzeit? Das wäre für mich interessant zu wissen, da ich demnächst auch ein Spiel entwickeln möchte.
...
- sprite rotate bug (unexpected behaviour on non rectangular sprites)
- sprite resize bug (crash if one sprite dimension is bigger than the respective screen dimension)
- SetFramerate() bug (cpu load + 10 - 20 %)
- ...

Viel Erfolg mit dem mit dem Spiel - ich hab kürzlich meine Versuche auf Eis gelegt...
https://www.youtube.com/watch?v=vBXwB-SDz7k

Der Witz ist ja das PB z.B. SDL unterstützt aber uns dennoch keinen direkten API Zugriff gewährt.

Jede andere Sprache die was auf sich hält bietet zumindest (einfach gesagt)
vollen Support/Zugriff für die gängigsten libraries...

Über Ogre red ich lieber erst gar nicht...
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von RSBasic »

Mijikai hat geschrieben:- sprite rotate bug (crash if one sprite dimension is bigger than the respective screen dimension)
In der Hilfe wird folgendes darauf hingewiesen:
LoadSprite() hat geschrieben:Sprites sollten nicht größer als der verwendete Bildschirmmodus sein. Das Verwenden größerer Sprites kann auf mancher Hardware funktionieren, auf anderer nicht. Besser ist das Aufsplitten des großen Sprites in mehrere kleine.
Warum sollte man eigentlich eine große Grafik verwenden? Ich kenne gerade kein Beispiel. Hm, vielleicht ein Tileset. Hast du ein anderes Beispiel?
Mijikai hat geschrieben:SetFramerate() bug (cpu load + 10 - 20 %)
Ist das ein großes Problem? Wird die Spielperformance dadurch deutlich schlechter?
Nur weil ein Prozessor beispielsweise 50 % oder 100 % laut Task-Manager ausgelastet ist, bedeutet das ja nicht unbedingt, dass das Spiel ruckelt.
Konntest du das feststellen?
Mijikai hat geschrieben:Viel Erfolg mit dem mit dem Spiel - ich hab kürzlich meine Versuche auf Eis gelegt...
Damals im Jahr 2009 habe ich mein erstes Spiel entwickelt und hatte damit keine Probleme. Es kann doch nicht sein, dass seitdem die Library schlechter/fehleranfälliger geworden ist oder?
Sieht gut aus. :allright:
Laut Hochladedatum hast du dein Projekt vor kurzer Zeit aufgegeben. Gab es für die aufgetretenen Probleme keine andere Lösungsmöglichkeiten oder Workarounds?
Ist doch schade, wenn du dein angefangenes Spiel nicht mehr weiterentwickeln würdest. Vielleicht kann dir jemand aus dem Forum helfen, um einen bestimmten Bug zu umgehen oder mit einer anderen Funktion (API) das Vorhaben zu ermöglichen.
STARGÅTE hat letztens auch ein Spiel veröffentlicht. Hatte er vielleicht dieselben Probleme?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von ts-soft »

RSBasic hat geschrieben:
ts-soft hat geschrieben:Du solltest nicht mehr mit den API-Funktionen zur Nutzung einer DLL arbeiten, da hat PB bessere Funktionen
Die PB-Funktionen greifen ja auch nur auf API-Funktionen des jeweiligen Betriebssystems zu.
Aber mit definierten Parametern (z.B. Prototypes) und richtig Codiert (ASCII in diesem Fall)!

Hätte er von vornherein PB-Funktionen genutzt, wäre dieser Thread überflüssig.

Keine API nutzen, wenn unnötig!
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
JReimi
Beiträge: 4
Registriert: 20.04.2014 19:11

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von JReimi »

Hallo Thomas,
danke für die bemühungen. Habe mein beispiel so abgeändert, kommt aber wieder die fehlermeldung

Code: Alles auswählen

#D3D_SDK_VERSION=31 

#D3D_OK=0 

#D3DFVF_XYZ=2 
#D3DFVF_XYZRHW=4 
#D3DFVF_DIFFUSE=64 

#D3DSWAPEFFECT_DISCARD=1 
#D3DSWAPEFFECT_FLIP=2 
#D3DSWAPEFFECT_COPY=3 
#D3DSWAPEFFECT_COPY_VSYNC=4 

#D3DCLEAR_TARGET=1 

#D3DADAPTER_DEFAULT=0 

#D3DDEVTYPE_HAL=1 
#D3DDEVTYPE_REF=2 
#D3DDEVTYPE_SW=3 

#D3DCREATE_SOFTWARE_VERTEXPROCESSING=32 
#D3DCREATE_HARDWARE_VERTEXPROCESSING=64 
#D3DCREATE_MIXED_VERTEXPROCESSING=128 

#D3DPT_POINTLIST=1 
#D3DPT_LINELIST=2 
#D3DPT_LINESTRIP=3 
#D3DPT_TRIANGLELIST=4 
#D3DPT_TRIANGLESTRIP=5 

#D3DFMT_X1R5G5B5=24 
#D3DFMT_A1R5G5B5=25 
#D3DFMT_R5G6B5=23 
#D3DFMT_X8R8G8B8=22 
#D3DFMT_A8R8G8B8=21 
#D3DFMT_R8G8B8=20 


#D3DTS_PROJECTION=3 
#D3DTS_WORLD=256 

#D3DPRESENTFLAG_LOCKABLE_BACKBUFFER=1 

#D3DRS_LIGHTING=137 
#D3DRS_ALPHABLENDENABLE=27 
#D3DRS_FILLMODE=8 
#D3DRS_CULLMODE=22 
#D3DRS_SRCBLEND=19 
#D3DRS_DESTBLEND=20 
#D3DRS_FOGENABLE=28 
#D3DRS_FOGCOLOR=34 

Structure My_Vertex 
  x.f 
  y.f 
  z.f 
  col.l 
EndStructure 

Structure D3DXMATRIX 
  _11.f 
  _12.f 
  _13.f 
  _14.f 
  _21.f 
  _22.f 
  _23.f 
  _24.f 
  _31.f 
  _32.f 
  _33.f 
  _34.f 
  _41.f 
  _42.f 
  _43.f 
  _44.f 
EndStructure 

Structure D3DDISPLAYMODE 
  Width.l 
  Height.l 
  RefreshRate.l 
  Format.l 
EndStructure 

Structure D3DADAPTER_IDENTIFIER9 
  Driver.b[512] 
  Description.b[512] 
  DeviceName.b[32] 
  DriverVersion.Large_Integer 
  DriverVersionLowPart.l 
  DriverVersionHighPart.l 
  VendorId.l 
  DeviceId.l 
  SubSysId.l 
  Revision.l 
  DeviceIdentifier.GUID 
  WHQLLevel.l 
EndStructure 


Structure D3DPresent_Parameters 
  BackBufferWidth.l 
  BackBufferHeight.l 
  BackBufferFormat.l 
  BackBufferCount.l 
  MultiSampleType.l 
  MultiSampleQuality.l 
  SwapEffect.l 
  hDeviceWindow.l 
  Windowed.l 
  EnableAutoDepthStencil.l 
  AutoDepthStencilFormat.l 
  Flags.l 
  FullScreen_RefreshRateInHz.l 
  FullScreen_PresentationInterval.l 
EndStructure 


Procedure MoveMatrix(*Matrix.D3DXMATRIX,X.f,Y.f,Z.f) 
  *Matrix\_41=X 
  *Matrix\_42=Y 
  *Matrix\_43=Z 
EndProcedure 

Procedure RotateMatrixX(*Matrix.D3DXMATRIX,Grad.f) 
  *Matrix\_11=1.0 
  *Matrix\_44=1.0 
  *Matrix\_12=0.0 
  *Matrix\_13=0.0 
  *Matrix\_14=0.0 
  *Matrix\_41=0.0 
  *Matrix\_21=0.0 
  *Matrix\_24=0.0 
  *Matrix\_42=0.0 
  *Matrix\_31=0.0 
  *Matrix\_34=0.0 
  *Matrix\_43=0.0 
  Rad.f=Grad/#PI*2 
  *Matrix\_22= Cos(Rad) 
  *Matrix\_23= Sin(Rad) 
  *Matrix\_32=-Sin(Rad) 
  *Matrix\_33= Cos(Rad) 
EndProcedure 

Procedure RotateMatrixY(*Matrix.D3DXMATRIX,Grad.f) 
  *Matrix\_22=1.0 
  *Matrix\_44=1.0 
  *Matrix\_12=0.0 
  *Matrix\_14=0.0 
  *Matrix\_41=0.0 
  *Matrix\_21=0.0 
  *Matrix\_23=0.0 
  *Matrix\_24=0.0 
  *Matrix\_42=0.0 
  *Matrix\_32=0.0 
  *Matrix\_34=0.0 
  *Matrix\_43=0.0 
  Rad.f=Grad/#PI*2 
  *Matrix\_11= Cos(Rad) 
  *Matrix\_13=-Sin(Rad) 
  *Matrix\_31= Sin(Rad) 
  *Matrix\_33= Cos(Rad) 
EndProcedure 

Procedure RotateMatrixZ(*Matrix.D3DXMATRIX,Grad.f) 
  *Matrix\_33=1.0 
  *Matrix\_44=1.0 
  *Matrix\_13=0.0 
  *Matrix\_14=0.0 
  *Matrix\_41=0.0 
  *Matrix\_23=0.0 
  *Matrix\_24=0.0 
  *Matrix\_42=0.0 
  *Matrix\_31=0.0 
  *Matrix\_32=0.0 
  *Matrix\_34=0.0 
  *Matrix\_43=0.0 
  Rad.f=Grad/#PI*2 
  *Matrix\_11= Cos(Rad) 
  *Matrix\_12= Sin(Rad) 
  *Matrix\_21=-Sin(Rad) 
  *Matrix\_22= Cos(Rad) 
EndProcedure 




Procedure D3D_Init()
  Global D3DInst
  Global D3D.IDirect3D9
  Global D3DWnd.D3DPresent_Parameters
  Global D3DDevice.IDirect3DDevice9
  Global D3DInst
  D3DInst = LoadLibrary_("D3D9.dll")
  If D3DInst
    Protected *func = Ascii("Direct3DCreate9")
    D3D = CallFunctionFast(GetProcAddress_(D3DInst, *func), #D3D_SDK_VERSION)
    FreeMemory(*func)
  EndIf
  ProcedureReturn D3D
EndProcedure

Procedure D3D_OpenScreen(WindowID,Width,Height,PixelFormat,SwapEffect,Lockable) 
  If D3D 
    D3DWnd\SwapEffect=SwapEffect 
    D3DWnd\BackBufferWidth=Width 
    D3DWnd\BackBufferHeight=Height 
    D3DWnd\BackBufferCount=1 
    D3DWnd\BackBufferFormat=PixelFormat 
    D3DWnd\hDeviceWindow=WindowID 
    D3DWnd\Flags=#D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 
    If Lockable=0:D3DWnd\Flags=0:EndIf 
    Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
  EndIf 
  ProcedureReturn D3DDevice 
EndProcedure 

Procedure D3D_OpenWindowedScreen(WindowID,Lockable) 
  If D3D 
    ScrInfo.D3DDISPLAYMODE 
    D3D\GetAdapterDisplayMode(#D3DADAPTER_DEFAULT,ScrInfo) 
    D3DWnd\SwapEffect=#D3DSWAPEFFECT_DISCARD 
    D3DWnd\BackBufferFormat=ScrInfo\Format 
    D3DWnd\Windowed=-1 
    D3DWnd\hDeviceWindow=WindowID 
    D3DWnd\Flags=#D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 
    If Lockable=0:D3DWnd\Flags=0:EndIf 
    Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_HAL,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_REF,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_MIXED_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
    If Result 
      Result=D3D\CreateDevice(#D3DADAPTER_DEFAULT,#D3DDEVTYPE_SW,WindowID,#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice) 
    EndIf 
  EndIf 
  ProcedureReturn D3DDevice 
EndProcedure 

Procedure D3D_Release() 
  If D3DDevice:D3DDevice\Release():EndIf 
  If D3D:D3D\Release():EndIf 
  If D3DInst:FreeLibrary_(D3DInst):EndIf 
EndProcedure 











Global FPS,Count,Start 
Global BackBuffer.IDirect3DSurface9,AdapterInfo.D3DADAPTER_IDENTIFIER9,ScrInfo.D3DDISPLAYMODE 


Global VertexNr 
Global Dim Vertex.My_Vertex(1000) 

Procedure SetVertexColor(RGB) 
  Vertex(VertexNr)\col=RGB(Blue(RGB),Green(RGB),Red(RGB)) 
EndProcedure 

Procedure SetVertex(x.f,y.f,z.f) 
  Vertex(VertexNr)\x=x 
  Vertex(VertexNr)\y=y 
  Vertex(VertexNr)\z=z 
  VertexNr+1 
EndProcedure 

Procedure RenderScene() 
  D3DDevice\Clear(0,0,#D3DCLEAR_TARGET,$FF,0.0,0) 
  
  DC.l 
  BackBuffer\GetDC(@DC) 
  SetBkMode_(DC,1) 
  SetTextColor_(DC,#White) 
  SelectObject_(DC,GetStockObject_(#ANSI_VAR_FONT)) 
  Text$="FPS: "+Str(FPS) 
  TextOut_(DC,350,0,@Text$,Len(Text$)) 
  Text$=Str(ScrInfo\Width)+"x"+Str(ScrInfo\Height)+"@"+Str(ScrInfo\RefreshRate)+" Hz" 
  TextOut_(DC,350,20,@Text$,Len(Text$)) 
  Text$=PeekS(@AdapterInfo\Description)+"("+PeekS(@AdapterInfo\Driver)+")" 
  TextOut_(DC,350,40,@Text$,Len(Text$)) 
  BackBuffer\ReleaseDC(DC) 
  
  D3DDevice\BeginScene() 
  D3DDevice\DrawPrimitiveUP(#D3DPT_TRIANGLELIST,VertexNr/3,@Vertex(0),16) 
  D3DDevice\EndScene() 
  
  D3DDevice\Present(0,0,0,0) 
EndProcedure 

If D3D_Init()=0 
  MessageRequester("","Direct3D konnte nicht gestartet werden.") 
  D3D_Release() 
  End 
EndIf 



Flags=#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget 
  
OpenWindow(1,0,0,640,480,"Direct3D 9 Test",Flags) 

OpenWindow(2,0,0,100,100,"D3D9 Test",#PB_Window_SystemMenu,WindowID(1)) 


SetWindowPos_(WindowID(1),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE) 
SetWindowPos_(WindowID(2),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE) 



Result=D3D_OpenScreen(WindowID(1),640,480,#D3DFMT_X8R8G8B8,#D3DSWAPEFFECT_DISCARD,#True) 
If Result=0 
  Result=D3D_OpenScreen(WindowID(1),640,480,#D3DFMT_R5G6B5,#D3DSWAPEFFECT_DISCARD,#True) 
EndIf 
If Result=0 
  Result=D3D_OpenScreen(WindowID(1),640,480,#D3DFMT_X1R5G5B5,#D3DSWAPEFFECT_DISCARD,#True) 
EndIf 
If Result=0 
  Result=D3D_OpenWindowedScreen(WindowID(1),#True) 
EndIf 

If Result=0 
  MessageRequester("","Direct3D konnte nicht gestartet werden.") 
  D3D_Release() 
  End 
EndIf 

ProjMatrix.D3DXMATRIX 

ProjMatrix\_11=Cos((#PI/4)/2)/Sin((#PI/4)/2) 
ProjMatrix\_22=Cos((#PI/4)/2)/Sin((#PI/4)/2) 
ProjMatrix\_33=1/(1-0.001) 
ProjMatrix\_34=1 
ProjMatrix\_43=-(1/(1-0.001)) 

D3DDevice\SetTransform(#D3DTS_PROJECTION,@ProjMatrix) 

RGB1=RGB(192,192,0) 
RGB2=RGB(64,128,0) 
RGB3=RGB(128,64,0) 

SetVertexColor(RGB1) 
SetVertex(0.0,0.25,0.0) 
SetVertexColor(RGB2) 
SetVertex(-0.5,-0.5,0.5) 
SetVertexColor(RGB3) 
SetVertex(0.5,-0.5,0.5) 
SetVertexColor(RGB1) 
SetVertex(0.0,0.25,0.0) 
SetVertexColor(RGB3) 
SetVertex(0.5,-0.5,0.5) 
SetVertexColor(RGB2) 
SetVertex(0.5,-0.5,-0.5) 
SetVertexColor(RGB1) 
SetVertex(0.0,0.25,0.0) 
SetVertexColor(RGB2) 
SetVertex(0.5,-0.5,-0.5) 
SetVertexColor(RGB3) 
SetVertex(-0.5,-0.5,-0.5) 
SetVertexColor(RGB1) 
SetVertex(0.0,0.25,0.0) 
SetVertexColor(RGB3) 
SetVertex(-0.5,-0.5,-0.5) 
SetVertexColor(RGB2) 
SetVertex(-0.5,-0.5,0.5) 

D3DDevice\SetFVF(#D3DFVF_XYZ|#D3DFVF_DIFFUSE) 
D3DDevice\SetRenderState(#D3DRS_LIGHTING,0) 

D3DDevice\GetBackBuffer(0,0,0,@BackBuffer) 

D3D\GetAdapterIdentifier(0,0,AdapterInfo) 
D3D\GetAdapterDisplayMode(#D3DADAPTER_DEFAULT,ScrInfo) 

Z.f=5 
X.f=0 
Y.f=0 
RotY.f 

D3DDevice\SetDialogBoxMode(-1) 

Repeat 
  
  Count+1:If timeGetTime_()-Start>1000:FPS=Count:Count=0:Start=timeGetTime_():EndIf 
    
  If GetGadgetState(1) 
    D3DDevice\SetRenderState(#D3DRS_FOGENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_ALPHABLENDENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_FILLMODE,3) 
    D3DDevice\SetRenderState(#D3DRS_CULLMODE,3) 
  EndIf 
  
  If GetGadgetState(2) 
    D3DDevice\SetRenderState(#D3DRS_FOGENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_ALPHABLENDENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_FILLMODE,2) 
    D3DDevice\SetRenderState(#D3DRS_CULLMODE,0) 
  EndIf 
  
  If GetGadgetState(3) 
    D3DDevice\SetRenderState(#D3DRS_FOGENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_FILLMODE,3) 
    D3DDevice\SetRenderState(#D3DRS_CULLMODE,3) 
    D3DDevice\SetRenderState(#D3DRS_ALPHABLENDENABLE,-1) 
    D3DDevice\SetRenderState(#D3DRS_SRCBLEND,2) 
    D3DDevice\SetRenderState(#D3DRS_DESTBLEND,2) 
  EndIf 
  
  If GetGadgetState(4) 
    D3DDevice\SetRenderState(#D3DRS_ALPHABLENDENABLE,0) 
    D3DDevice\SetRenderState(#D3DRS_FILLMODE,3) 
    D3DDevice\SetRenderState(#D3DRS_CULLMODE,3) 
    D3DDevice\SetRenderState(#D3DRS_FOGENABLE,-1) 
    D3DDevice\SetRenderState(#D3DRS_FOGCOLOR,RGB(96,96,96)) 
  EndIf 
  
  RenderScene() 
  
  If GetAsyncKeyState_(#VK_UP)=-32767   :z-0.15:EndIf 
  If GetAsyncKeyState_(#VK_DOWN)=-32767 :z+0.15:EndIf 
  
  If GetAsyncKeyState_(#VK_LEFT)=-32767 :x+0.15:EndIf 
  If GetAsyncKeyState_(#VK_RIGHT)=-32767:x-0.15:EndIf 
  
  WorldMatrix.D3DXMATRIX 
  
  RotY+0.1 
  
  RotateMatrixY(@WorldMatrix,RotY) 
  MoveMatrix(@WorldMatrix,x,y,z) 
  
  D3DDevice\SetTransform(#D3DTS_WORLD,@WorldMatrix) 
  
  
  Event=WindowEvent() 
  
  If Event=#PB_Event_CloseWindow And EventWindow()=2 
    D3DDevice\SetDialogBoxMode(0) 
    CloseWindow(2) 
  EndIf 
  
Until GetAsyncKeyState_(#VK_ESCAPE)=-32767 


D3DDevice\SetDialogBoxMode(0) 

D3D_Release() 
End 


; IDE Options = PureBasic v4.02 (Windows - x86)
; Folding = --
; DisableDebugger
__________________________________________________
Code-Tags hinzugefügt
01.11.2017
RSBasic
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: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von ts-soft »

Das liegt aber nicht an meinem geänderten Code :twisted:
D3D ist in Ordnung, soweit wie ich das sehe, aber D3DDevice funktioniert nicht!
Außerdem sind die Strukturen nicht an 64-Bit angepaßt, z.B.:

Code: Alles auswählen

Structure D3DPresent_Parameters
  BackBufferWidth.l
  BackBufferHeight.l
  BackBufferFormat.l
  BackBufferCount.l
  MultiSampleType.l
  MultiSampleQuality.l
  SwapEffect.l
  hDeviceWindow.l ; sollte ein Integer sein!
  Windowed.l
  EnableAutoDepthStencil.l
  AutoDepthStencilFormat.l
  Flags.l
  FullScreen_RefreshRateInHz.l
  FullScreen_PresentationInterval.l
EndStructure
Aber mit 3D kenne ich mich nicht aus, solltest mal den Autor des Codes kontaktieren oder vielleicht hat jemand
anders hier die Zeit das zu fixen. Sind evtl. auch noch div. PeekS und PokeS zu ändern.
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
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von Mijikai »

JReimi hat geschrieben:Hallo Thomas,
danke für die bemühungen. Habe mein beispiel so abgeändert, kommt aber wieder die fehlermeldung

...
Versuch mal CallCFunctionFast()
(wenn es für x64 ist müssen zudem die Strukturen noch angepasst werden)
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von Mijikai »

Hier mal die Present Struktur x86 & x86

Code: Alles auswählen

Structure PRESENT_STRUCT
  BackBufferWidth.l
  BackBufferHeight.l
  BackBufferFormat.l
  BackBufferCount.l
  MultiSampleType.l
  MultiSampleQuality.l
  SwapEffect.l
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    __alignment.l
  CompilerEndIf
  hDeviceWindow.i
  Windowed.l
  EnableAutoDepthStencil.l
  AutoDepthStencilFormat.l
  flags.l
  FullScreen_RefreshRateInHz.l
  PresentationInterval.l
EndStructure
Edit: ts-soft war schneller :>
Zuletzt geändert von Mijikai am 01.11.2017 15:44, insgesamt 2-mal geändert.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von Mijikai »

RSBasic hat geschrieben: ...
Ist das ein großes Problem? Wird die Spielperformance dadurch deutlich schlechter?
Nur weil ein Prozessor beispielsweise 50 % oder 100 % laut Task-Manager ausgelastet ist, bedeutet das ja nicht unbedingt, dass das Spiel ruckelt.
Konntest du das feststellen?
...
Ja das ist ein großes Problem...
Bis zu + 20% load ohne was zu rendern - wie soll das bitte akzeptable sein.
Die "Wait" - Funktion ist einfach fehlerhaft programmiert.
Zu allen erwähnten Bugs gibt es Bug-Reports mit Beispielen im Englischem Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: d3d9.dll falscher Rückgabewert bei x64 System

Beitrag von RSBasic »

Das mit dem Bug mit der Auslastung werde ich mal irgendwann testen. Einmal mit aktueller und einmal mit der Version, mit der ich damals mein Spiel kompiliert habe.

Es gibt aber auch, wie einige hier in diesem Thread und in anderen Threads vorgeschlagen haben, kein SetFrameRate() zu verwenden, sondern eine eigene zeitgesteuerte Berechnung zu programmieren, die FPS-unabhängig ist, was zwar etwas aufwendiger ist, aber deutlich besser ist. Beispielcodes findest du dort auch.
Also hast du damit schon mal eine andere Lösungsmöglichkeit (kein Workaround).

PS: Versuche bitte zukünftig, wenn du in kurzer Zeit antworten möchtest, alles in einem Beitrag zu verfassen. Danke :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten