Damit wurden dann aber keine "ordinals" mehr gehen.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
d3d9.dll falscher Rückgabewert bei x64 System
Re: d3d9.dll falscher Rückgabewert bei x64 System
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: d3d9.dll falscher Rückgabewert bei x64 System
- sprite rotate bug (unexpected behaviour on non rectangular sprites)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 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...
Re: d3d9.dll falscher Rückgabewert bei x64 System
In der Hilfe wird folgendes darauf hingewiesen:Mijikai hat geschrieben:- sprite rotate bug (crash if one sprite dimension is bigger than the respective screen dimension)
Warum sollte man eigentlich eine große Grafik verwenden? Ich kenne gerade kein Beispiel. Hm, vielleicht ein Tileset. Hast du ein anderes Beispiel?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.
Ist das ein großes Problem? Wird die Spielperformance dadurch deutlich schlechter?Mijikai hat geschrieben:SetFramerate() bug (cpu load + 10 - 20 %)
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?
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?Mijikai hat geschrieben:Viel Erfolg mit dem mit dem Spiel - ich hab kürzlich meine Versuche auf Eis gelegt...
Sieht gut aus.Mijikai hat geschrieben:https://www.youtube.com/watch?v=vBXwB-SDz7k
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?
- 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
Aber mit definierten Parametern (z.B. Prototypes) und richtig Codiert (ASCII in diesem Fall)!RSBasic hat geschrieben:Die PB-Funktionen greifen ja auch nur auf API-Funktionen des jeweiligen Betriebssystems zu.ts-soft hat geschrieben:Du solltest nicht mehr mit den API-Funktionen zur Nutzung einer DLL arbeiten, da hat PB bessere Funktionen
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: d3d9.dll falscher Rückgabewert bei x64 System
Hallo Thomas,
danke für die bemühungen. Habe mein beispiel so abgeändert, kommt aber wieder die fehlermeldung
__________________________________________________
Code-Tags hinzugefügt
01.11.2017
RSBasic
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
- 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
Das liegt aber nicht an meinem geänderten Code
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.:
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.
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
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: d3d9.dll falscher Rückgabewert bei x64 System
Versuch mal CallCFunctionFast()JReimi hat geschrieben:Hallo Thomas,
danke für die bemühungen. Habe mein beispiel so abgeändert, kommt aber wieder die fehlermeldung
...
(wenn es für x64 ist müssen zudem die Strukturen noch angepasst werden)
Re: d3d9.dll falscher Rückgabewert bei x64 System
Hier mal die Present Struktur x86 & x86
Edit: ts-soft war schneller :>
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
Zuletzt geändert von Mijikai am 01.11.2017 15:44, insgesamt 2-mal geändert.
Re: d3d9.dll falscher Rückgabewert bei x64 System
Ja das ist ein großes Problem...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?
...
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.
Re: d3d9.dll falscher Rückgabewert bei x64 System
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
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