Aktuelle Zeit: 18.11.2017 21:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 13:56 
Offline
Benutzeravatar

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

-> Fix:

Code:
Import "kernel32.lib"
  GetProcAddress(ModuleHandle.i,FunctionName.p-Ascii)
EndImport



Damit wurden dann aber keine "ordinals" mehr gehen.

_________________
PureBasic 5.24 LTS (Windows x86/x64) | Windows7 SP1 x64 | windows 10 x64 Anniversary Bug


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 14:03 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 14:18 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
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?

Mijikai hat geschrieben:
https://www.youtube.com/watch?v=vBXwB-SDz7k

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?

_________________
BildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 14:43 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
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.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 14:47 
Offline

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

Code:
#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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 15:08 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
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:
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.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 15:13 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 15:36 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Hier mal die Present Struktur x86 & x86
Code:
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 15:43 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: d3d9.dll falscher Rückgabewert bei x64 System
BeitragVerfasst: 01.11.2017 15:50 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
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 :)

_________________
BildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye