Deleting All Objects, Changing Screen Resolutions and reloading problem on a Mac

Previous topic - Next topic

MrTAToad

For some reason on a Mac (Windows and Linux are unaffected), a screen resolution change (after deleting all loaded objects) and then reloading everything causes a problem with two sprites - for some reason they end up with the graphic of a font file, and which is scaled to the original size.

This is the file which all data is read from :
Code (glbasic) Select
; DO NOT CHANGE ANYTHING IN THE FOLLOWING SECTION
[SPRITES]
0=2DGraphics/Title.png
1=2DGraphics/LogoSmall.png
2=2DGraphics/Player1.png
3=2DGraphics/Player2.png
4=2DGraphics/Player3.png
5=2DGraphics/Player4.png
6=2DGraphics/Player1Small.png
7=2DGraphics/Player2Small.png
8=2DGraphics/Player3Small.png
9=2DGraphics/Player4Small.png
10=2DGraphics/Tile01.png
11=2DGraphics/Tile02.png
12=2DGraphics/Tile03.png
13=2DGraphics/Tile04.png
14=2DGraphics/Tile05.png
15=2DGraphics/Tile06.png
16=2DGraphics/Tile07.png
17=2DGraphics/Tile08.png
18=2DGraphics/Arrow1.png
19=2DGraphics/Arrow2.png
20=2DGraphics/Arrow3.png
21=2DGraphics/Arrow4.png
22=2DGraphics/ActivePlayer.png
23=2DGraphics/SelectGrid.png
24=2DGraphics/l0.PNG
25=2DGraphics/l1.PNG
26=2DGraphics/l2.PNG
27=2DGraphics/l3.PNG
28=2DGraphics/l4.PNG
29=2DGraphics/l5.PNG
30=2DGraphics/l6.PNG
31=2DGraphics/l7.PNG
32=2DGraphics/l8.PNG
33=2DGraphics/l9.PNG
34=2DGraphics/S0.png
35=2DGraphics/S1.png
36=2DGraphics/S2.png
37=2DGraphics/S3.png
38=2DGraphics/S4.png
39=2DGraphics/S5.png
40=2DGraphics/S6.png
41=2DGraphics/S7.png
42=2DGraphics/S8.png
43=2DGraphics/S9.png
44=2DGraphics/Wet Mars/Texture.png
45=B:2DGraphics/Wet Mars/Bump Map.png
46=2DGraphics/1X1.png
47=2DGraphics/Menu Buttons/NetworkGame_MouseOver.png
48=2DGraphics/Menu Buttons/OneComputer_MouseOver.png
49=2DGraphics/Menu Buttons/Options_MouseOver.png
50=2DGraphics/Menu Buttons/HiscoreTable_MouseOver.png
51=2DGraphics/Menu Buttons/Instructions_MouseOver.png
52=2DGraphics/Menu Buttons/QuitGame_MouseOver.png
53=2DGraphics/Menu Buttons/NetworkGame_Standard.png
54=2DGraphics/Menu Buttons/OneComputer_Standard.png
55=2DGraphics/Menu Buttons/Options_Standard.png
56=2DGraphics/Menu Buttons/HiscoreTable_Standard.png
57=2DGraphics/Menu Buttons/Instructions_Standard.png
58=2DGraphics/Menu Buttons/QuitGame_Standard.png
59=2DGraphics/Menu Buttons/Back_MouseOver.png
60=2DGraphics/Menu Buttons/Back_Standard.png
61=2DGraphics/Menu Buttons/StartGame_MouseOver.png
62=2DGraphics/Menu Buttons/StartGame_Standard.png
63=2DGraphics/Menu Buttons/ChangeName1_MouseOver.png
64=2DGraphics/Menu Buttons/ChangeName1_Standard.png
65=2DGraphics/Menu Buttons/ChangeName2_MouseOver.png
66=2DGraphics/Menu Buttons/ChangeName2_Standard.png
67=2DGraphics/Menu Buttons/ChangeName3_MouseOver.png
68=2DGraphics/Menu Buttons/ChangeName3_Standard.png
69=2DGraphics/Menu Buttons/ChangeName4_MouseOver.png
70=2DGraphics/Menu Buttons/ChangeName4_Standard.png
71=2DGraphics/Menu Buttons/HostGame_MouseOver.png
72=2DGraphics/Menu Buttons/HostGame_Standard.png
73=2DGraphics/Menu Buttons/JoinGame_MouseOver.png
74=2DGraphics/Menu Buttons/JoinGame_Standard.png
75=2DGraphics/svg2raster.png
76=2DGraphics/indie640.png
77=2DGraphics/ump.PNG
78=2DGraphics/PlayerWait.PNG
79=2DGraphics/Random.PNG
80=2DGraphics/Menu Buttons/UpArrow_Standard.PNG
81=2DGraphics/Menu Buttons/UpArrow_MouseOver.PNG
82=2DGraphics/Menu Buttons/DownArrow_Standard.PNG
83=2DGraphics/Menu Buttons/DownArrow_MouseOver.PNG

; DO NOT CHANGE ANYTHING IN THE FOLLOWING SECTION
[3DGRAPHICS]
0=3DGraphics/World.ddd
1=3DGraphics/Levelselection.ddd

; DO NOT CHANGE ANYTHING IN THE FOLLOWING SECTION
[FONTS]
1=Fonts/StandardFont.png
2=Fonts/PlayerFont.png
3=Fonts/EntryFont1.png
4=Fonts/EntryFont2.png
5=Fonts/TitleFont.png
6=Fonts/SmallFont.png

; DO NOT CHANGE ANYTHING IN THE FOLLOWING SECTION
[SOUNDS]
; End of game
0=Sounds/romancandle_30.wav
; Intro
1=Sounds/00556_TranFX3.wav
; Title
2=Sounds/Wings_Of_A_Hero__BA013701.wav
; Invalid mouse selection
3=Sounds/notifier_01.wav
; Player has won
4=Sounds/success_sound_exploding_glass_01.wav
; Move two spaces
5=Sounds/beam_me_up.wav
; Move one space
6=Sounds/success_playful_01.wav
; Shape taken
7=Sounds/powerup_16.wav

; This contains a list of usable screen modes, in key order
; To add further resolutions, use the next availiable key number and use the following format :
; width,height
; DO NOT CHANGE ANY OF THE KEYS 0 TO 5
[SCREENRESOLUTIONS]
0=640,480
1=800,600
2=1024,768
3=1152,864
4=1280,960
5=1400,1050
6=1600,1200


This is my loading/unloading code :
Code (glbasic) Select
// --------------------------------- //
// Project: Spots
// Start: Thursday, September 11, 2008
// IDE Version: 5.360

// ------------------------------------------------------------- //
// ---  LOADREMOVEFILES  ---
// ------------------------------------------------------------- //
TYPE loadDataList
isBumpMap%
idNumber%
xSize%
ySize%
channel% // Only used by the sound system
ENDTYPE

GLOBAL spriteLoadData[] AS loadDataList
GLOBAL fontLoadData[] AS loadDataList
GLOBAL objectLoadData[] AS loadDataList
GLOBAL soundLoadData[] AS loadDataList
GLOBAL NO_DATA$="NO_DATA"
GLOBAL SOUND_INVALID% = -1
GLOBAL default_screenWidth%=640
GLOBAL default_screenHeight%=480
GLOBAL default_useWindow%=FALSE

FUNCTION loadRemoveFiles$: load%,fileName$
LOCAL errorMessage$

// These values are defined LOCAL:
errorMessage$=""
IF load%=TRUE
IF fileName$=""
errorMessage$="No filename has been provided"
ELSE
clearLoadData()
errorMessage$=doLoadData$(fileName$,TRUE)
ENDIF
ELSE
SYSTEMPOINTER TRUE
doLoadData$("",FALSE)
ENDIF

RETURN errorMessage$
ENDFUNCTION // LOADREMOVEFILES

FUNCTION doLoadData$:fileName$,doLoad%
LOCAL file$
LOCAL loop%,secLoop%
LOCAL errorMessage$
LOCAL bumpText$="B:"
LOCAL sections$[]; DIM sections$[8]
LOCAL isBumpMap%
LOCAL l AS loadDataList
LOCAL xPos%
LOCAL fX,fY
LOCAL barYSize% = 100
LOCAL barYPos%

errorMessage$=""

sections$[0]="SPRITES"
sections$[1]="SOUNDS"
sections$[2]="FONTS"
sections$[3]="3DGRAPHICS"
sections$[4]=""

IF doLoad%=TRUE
GETFONTSIZE fX,fY
barYPos%=(options.screenHeight%-barYSize%)/2

IF DOESFILEEXIST(fileName$)
INIOPEN fileName$
secLoop%=0
file$=""
WHILE sections$[secLoop%]<>""
xPos%=0
IF sections$[secLoop%]=sections$[2]
loop%=1
l.xSize%=0
l.ySize%=0
l.isBumpMap%=FALSE
l.idNumber%=0
DIMPUSH fontLoadData[],l
ELSE
loop%=0
ENDIF

file$=INIGET$(sections$[secLoop%],loop%)
WHILE file$<>NO_DATA$
DRAWRECT 0,barYPos,xPos%,100,RGB(255,255,0)
IF LEFT$(file$,LEN(bumpText$))=bumpText$
isBumpMap%=TRUE
file$=MID$(file$,LEN(bumpText$),LEN(file$))
ELSE
isBumpMap%=FALSE
ENDIF

IF DOESFILEEXIST(file$)
SETFONT 0
PRINT file$,0,options.screenHeight%-fY

l.xSize%=0
l.ySize%=0
l.isBumpMap%=FALSE
l.idNumber%=loop%
l.channel%=SOUND_INVALID%

SELECT sections$[secLoop%]
CASE sections$[0]
IF isBumpMap%=TRUE
LOADBUMPTEXTURE file$,loop%
l.isBumpMap=TRUE
ELSE
LOADSPRITE file$,loop%
ENDIF

GETSPRITESIZE loop%,l.xSize%,l.ySize%
DEBUG "File : "+file$+" "+l.xSize%+" "+l.ySize%+"\n"
DIMPUSH spriteLoadData[],l
CASE sections$[1]
LOADSOUND file$,loop%,1
DIMPUSH soundLoadData[],l
CASE sections$[2]
LOADFONT file$,loop%
SETFONT loop%
GETFONTSIZE l.xSize%,l.ySize%
DIMPUSH fontLoadData[],l
CASE sections$[3]
X_LOADOBJ file$,loop%
DIMPUSH objectLoadData[],l
ENDSELECT

SHOWSCREEN
INC loop%,1
INC xPos%,1
file$=INIGET$(sections$[secLoop%],loop%)
ELSE
errorMessage$="Can NOT find the file : "+file$
file$=NO_DATA$
ENDIF
WEND

IF errorMessage$<>""
RETURN errorMessage$
ENDIF

INC secLoop%,1
WEND
ELSE
errorMessage$="Can NOT find INI file : "+fileName$
ENDIF
ELSE
FOREACH l IN spriteLoadData[]
IF l.isBumpMap%=TRUE
LOADBUMPTEXTURE "",l.idNumber%
ELSE
LOADSPRITE "",l.idNumber%
ENDIF
NEXT

FOREACH l IN fontLoadData[]
LOADFONT "",l.idNumber%
NEXT

FOREACH l IN soundLoadData[]
LOADSOUND "",l.idNumber%,1
NEXT

FOREACH l IN objectLoadData[]
X_LOADOBJ "",loop%
NEXT
ENDIF

RETURN errorMessage$
ENDFUNCTION

FUNCTION clearLoadData:
DIM spriteLoadData[0]
DIM fontLoadData[0]
DIM objectLoadData[0]
DIM soundLoadData[0]
ENDFUNCTION

FUNCTION setupDisplay:setupFile$,BYREF screenWidth%,BYREF screenHeight%,BYREF fullScreen%,BYREF mVolume,BYREF sVolume,doLoadData%
LOCAL DISPLAY_SECTION$="DISPLAY"
LOCAL DISPLAY_SCREENWIDTH$="SCREENWIDTH"
LOCAL DISPLAY_SCREENHEIGHT$="SCREENHEIGHT"
LOCAL DISPLAY_FULLSCREEN$="SCREENFULLSCREEN"
LOCAL VOLUME_SECTION$="VOLUME"
LOCAL VOLUME_MUSIC$="MUSICVOLUME"
LOCAL VOLUME_SFX$="MUSICSFX"

LOCAL width$
LOCAL height$
LOCAL fullScreen$
LOCAL musicVolume$
LOCAL sfxVolume$

LOCAL resError$[]; DIM resError$[3]

LOCAL fw%
LOCAL fh%
LOCAL loop%
LOCAL y%

INIOPEN setupFile$
IF doLoadData=TRUE
width$=INIGET$(DISPLAY_SECTION$,DISPLAY_SCREENWIDTH$)
height$=INIGET$(DISPLAY_SECTION$,DISPLAY_SCREENHEIGHT$)
fullScreen$=INIGET$(DISPLAY_SECTION$,DISPLAY_FULLSCREEN$)
musicVolume$=INIGET$(VOLUME_SECTION$,VOLUME_MUSIC$)
sfxVolume$=INIGET$(VOLUME_SECTION$,VOLUME_SFX$)

IF width$=NO_DATA$ OR height$=NO_DATA$ OR fullScreen$=NO_DATA$
// setup the default screen width
screenWidth%=default_screenWidth%
screenHeight%=default_screenHeight%
fullScreen%=default_useWindow%
ELSE
screenWidth%=width$
screenHeight%=height$
fullScreen%=fullScreen$
ENDIF

IF musicVolume$=NO_DATA$
mVolume=1.0
ELSE
mVolume=musicVolume$
ENDIF

IF sfxVolume$=NO_DATA$
sVolume=1.0
ELSE
sVolume=sfxVolume$
ENDIF

// Now we get the list of availiable screen modes
IF ScreenModes(default_screenWidth%,default_screenHeight%,"")=0
RETURN FALSE
ELSE
// Make sure this resolution is present
IF findResolution(screenWidth%,screenHeight%)=FALSE
// Can we use the default resolution ?
IF findResolution(default_screenWidth%,default_screenHeight%)=FALSE
// No
RETURN FALSE
ENDIF

screenWidth%=default_screenWidth%
screenHeight%=default_screenHeight%
ENDIF
ENDIF
ELSE
INIPUT DISPLAY_SECTION$,DISPLAY_SCREENWIDTH$,screenWidth%
INIPUT DISPLAY_SECTION$,DISPLAY_SCREENHEIGHT$,screenHeight%
INIPUT DISPLAY_SECTION$,DISPLAY_FULLSCREEN$,fullScreen%
INIPUT VOLUME_SECTION$,VOLUME_MUSIC$,mVolume
INIPUT VOLUME_SECTION$,VOLUME_SFX$,sVolume
RETURN TRUE
ENDIF

SETSCREEN screenWidth%,screenHeight%,fullScreen%
IF fullScreen%=TRUE AND ISFULLSCREEN()=FALSE
// Try it without full screen ?
fullScreen%=FALSE

SETSCREEN screenWidth%,screenHeight%,fullScreen%

SETFONT 0
GETFONTSIZE fw%,fh%

resError$[0]="Full Screen resolution is unavailiable."
resError$[1]="Reverting to window mode."
resError$[2]="Press LEFT MOUSE button to continue."

y%=(screenHeight%-(fh%*2))/2

FOR loop%=0 TO 2
IF loop%=2
y%=options.screenHeight%-fh%-2
ENDIF

PRINT resError$[loop%],centreTextX(screenWidth%,fw%,resError$[loop%]),y%
INC y%,fh%
NEXT

SHOWSCREEN
MOUSEWAIT
ENDIF

SYSTEMPOINTER FALSE
BLACKSCREEN
LIMITFPS 0
SETTRANSPARENCY RGB(0,0,0)
SHOWSCREEN

CentreWindow()
ChangeWindowText(PROGRAMNAME$+" - Version : "+VERSION$)

RETURN TRUE
ENDFUNCTION


And lastly, this is the code that initialiates a screen resolution change :
Code (glbasic) Select
HUSH
STOPMUSIC

// Save everything
setupDisplay(OPTIONSFILE$,options.screenWidth%,options.screenHeight%,options.fullScreen%,options.mVolume%,options.sVolume%,FALSE)

IF resChange=OPTRETURN_RESCHANGE%
shutdownProgram("",FALSE)

errorMessage$=setup$()
IF errorMessage$<>""
shutdownProgram(errorMessage$,TRUE)
ENDIF
ENDIF

MrTAToad

The corruption of one sprite is still happening, for some reason after a screen resolution change.

Kitty Hello

It might recreate a context. Bad driver.
Please load all graphics _after_ the SETSCREEN.

MrTAToad

I also do the reload after shanging the screen.  The odd thing is it only happens with one sprite, and it always takes a font file as its graphic...

Kitty Hello


MrTAToad