resize windowedscreen ohne AA?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

resize windowedscreen ohne AA?

Beitrag von inti »

'arbeite zZ noch PB3.94 aber das problem(?) habe ich auch mit der 4.00f - wie läßt sich das filtern eines windowedscreens beim resize verhindern? bei resizeimage() kann man das als parameter angeben aber bei windowdscreen habe ich in keiner der hilfen was gefunden und auch nix in diesem sowie im engl. forum! :|
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Soweit ich weiß hängt das mit der Einstellung Deiner Grafikkarte ab. Dort kannst Du ja festlegen, ob AA eingeschalten sein soll oder nicht. Daher ist es gut möglich, daß Dein Spiel auf dem einen Rechner mit und auf 'nem anderen ohne AA läuft. Ist zwar schade, aber das kann man wohl so vom Programm aus nicht beeinflussen...
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Hi
@ZeHa
Dort kannst Du ja festlegen, ob AA eingeschalten sein soll oder nicht.
Es handelt sich dabei um einen bilinearen filter, nicht um AA.(Es ist auch nicht möglich den Filter in den Einstellungen der Grafikkarte zu deaktivieren)

@inti
Es ist leider nicht möglich den Filter zu deaktivieren, die einzige möglichkeit (die mir einfällt) ist die Oberfläche über die CPU zeichnen zu lassen.
Ich hab mal eine Prozedur geschrieben, mit der es möglich ist den BackBuffer zu ersetzten.(durch eine Systemmem Oberfläche)

Code: Alles auswählen

Procedure _BackBufferPtr() 
!extrn _PB_DirectX_BackBuffer 
!MOV Eax,_PB_DirectX_BackBuffer 
ProcedureReturn 
EndProcedure 

Procedure _SetScreenWidth(Width) 
!extrn _PB_Screen_RealWidth 
!MOV Eax,[Esp+4] 
!MOV [_PB_Screen_RealWidth],Eax 
EndProcedure 

Procedure _SetScreenHeight(Height) 
!extrn _PB_Screen_RealHeight 
!MOV Eax,[Esp+4] 
!MOV [_PB_Screen_RealHeight],Eax 
EndProcedure 

Procedure ResizeWindowedScreen(Width,Height) 
BackBuffer=CreateSprite(-1,Width,Height) 
If BackBuffer=0:ProcedureReturn 0:EndIf 
*BackDDS.IDirectDrawSurface7=SpriteID(BackBuffer) 
*BackDDS\AddRef() 
FreeSprite(BackBuffer) 
*OldBackDDS.IDirectDrawSurface7=PeekL(_BackBufferPtr()) 
*OldBackDDS\Release() 
PokeL(_BackBufferPtr(),*BackDDS) 
_SetScreenWidth(Width) 
_SetScreenHeight(Height) 
UseBuffer(-1) 
ProcedureReturn 1 
EndProcedure 

#PB_Screen_VideoMem=0 
#PB_Screen_SystemMem=1 

Procedure ResizeWindowedScreenEx(Width,Height,Flags) 
BackBuffer=CreateSprite(-1,Width,Height,Flags) 
If BackBuffer=0:ProcedureReturn 0:EndIf 
*BackDDS.IDirectDrawSurface7=SpriteID(BackBuffer) 
*BackDDS\AddRef() 
FreeSprite(BackBuffer) 
*OldBackDDS.IDirectDrawSurface7=PeekL(_BackBufferPtr()) 
*OldBackDDS\Release() 
PokeL(_BackBufferPtr(),*BackDDS) 
_SetScreenWidth(Width) 
_SetScreenHeight(Height) 
UseBuffer(-1) 
ProcedureReturn 1 
EndProcedure 



InitSprite() 

OpenWindow(1,0,0,320,240,"ResizeWindowedScreen()") 
OpenWindowedScreen(WindowID(1),0,0,80,60,1,0,0) 

ResizeWindowedScreenEx(80,60,#PB_Screen_SystemMem) 
Repeat 

  StartDrawing(ScreenOutput()) 
  Box(0,0,70,60,#Red) 
  Line(0,0,99,99,#Blue) 
  StopDrawing() 


  FlipBuffers() 
Until WindowEvent()=#PB_Event_CloseWindow
Gruß
Stefan
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Egal ob das nun AA oder ein bilinearer Filter ist, der Effekt ist grob gesagt der gleiche. Und er ist nicht auf jeder Grafikkarte aktiv, ich hab bspw. Gloomy Nights schon auf Rechnern gespielt, wo kein "Weichzeichnen" (um es mal allgemein zu betiteln) verwendet wurde. Vielleicht ist es nicht einstellbar, aber dann trotzdem zumindest Graka-abhängig.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

Beitrag von inti »

danke, das beispiel hat mir schon weitergeholfen - es geht halt darum einen "ungefilterten" screen zu resizen bzw das zu erzwingen. die beiden großen grafikkarten-hersteller haben diesen modus immer automatsich aktiv und nicht jeder weiss wie man das abschaltet - außerdem liebe ich diesen verpixelten retro-look! ;) ...und wenn ich was weichzeichnen will bzw filtern dass mache ich das lieber selber! :wink:

dass das kein AA ist war schon klar aber mit dem begriff bzw der abkürzung weiss wenigsten fast jeder was gemeint ist! 8)
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

Beitrag von inti »

das ganze funktioniert scheinbar nur weil die grafik-beschleunigung für den openswindowedcreen() abgeschalten wird... dadurch hab ich 'nen framedrop von 80fps auf sage und schreibe 4 (vier)! :freak:
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Wow, gleich so viel ;)

Ein Umweg wäre natürlich, selbst zu resizen, sprich, im Falle daß die Anwendung (Spiel?) in einem Fenster ausgeführt wird, werden einfach alle Sprites doppelt so groß gezeichnet (natürlich nicht on-the-fly sondern schon im Voraus hochrechnen) und alle Koordinaten * 2 gerechnet.

Ist zwar auch nicht soo die perfekte Lösung aber immerhin denkbar.

An was programmierst Du denn grad rum, wenn ich mal fragen darf? :)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

Beitrag von inti »

nix grossartiges, ich hab' vor 2jahren mit pb v3.irgendwas 'nen kleinen screensaver geschrieben (wirklich nix aufregendes) der auf einem bildschirm 320x240 basiert... 'nen screen damit zu öffnen ist schon problematisch und bei einigen freunden die den begeistert :) nutzen stösst der mittlerweile recht unübliche modus 640x480 (das mit dem x2 habe ich schon gemacht) auf wenig verständis. nun habe ich den wieder mal ausgegraben, habe den auf windowedscreen umgeschrieben (wusste ich damals noch nicht) und störe mich ein klein wenig an dem hardware-filter... das sieht so "unretro" aus! :| ...und ein "aufblasen" der grafik würde mir die größe von 36kb kaputtmachen! :twisted:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... und wenn du alles in einen sprite abbildest, und den per sprite3D vergrößerst mit quality=0 ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

@KG
da dürften aber einige (ati :twisted:) grakas damit probleme haben. für sprite3d sollte man schon grössen im ^2 format verwenden.

@inti
im englischen forum gabs glaub ich mal sowas, ohne die sprite3d befehle. such einfach mal. :)

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Antworten