Possible image async loading bug? Not sure :(

Monkey Forums/Monkey Bug Reports/Possible image async loading bug? Not sure :(

TeaBoy(Posted 2014) [#1]
This is the main code I am using;

Import mojo
Import brl.asyncevent

Class PreLoadImages Implements IOnLoadImageComplete

  Field callImage : Image
  
  Method OnLoadImageComplete : Void(image : Image, path : String, source : IAsyncEventSource)
    If image
      callImage  = image
    End If
  End Method
  
  Method New(getPath : String)
    LoadImageAsync(getPath,,,Self)
  End Method
  
  Method GetImageHandle : Image()
    Return callImage
  End Method
End Class

Class Test Extends App

  Field imgLogo         : PreLoadImages
  Field splashScreen : Image

  Method OnCreate()
    SetUpdateRate(60)
    
    imgLogo = New PreLoadImages("imglogo.png")

  End Method
  
  Method OnRender()
    Cls(255, 255, 255)
    
    SplashScreen()
  End Method

  Method SplashScreen()
    splashScreen = imgLogo.GetImageHandle()
    
    DrawImage(splashScreen, (DeviceWidth()-splashScreen.Width())/2,(DeviceHeight()-splashScreen.Height())/2)
  End Method
  
  Method OnUpdate()
    UpdateAsyncEvents
  End Method

End Class

Function Main()
  New Test
End Function 


I keep on receiving this error regarding asyncimageloader.monkey:

Error Message:

Method Image.Init:Image(Local surf:Surface,Local nframes:Int,Local iflags:Int) is private

Method UpdateAsyncEvents:Void()
		If IsRunning() Return
		RemoveAsyncEventSource Self
		If _result 
			_surface.OnUnsafeLoadComplete()
			Local image:=(New Image).Init( _surface,_frames,_flags ) ' <-- problem with this line
			_onComplete.OnLoadImageComplete image,_mpath,Self
		Else
			_onComplete.OnLoadImageComplete Null,_mpath,Self
		Endif
	End


Not sure how to solve it :( [edit]: using Monkey V79d


nikoniko(Posted 2014) [#2]
What is size of image?


TeaBoy(Posted 2014) [#3]
.


nikoniko(Posted 2014) [#4]
You are using async loading image and do draw it in common onrender() method without checking is image loaded.

Add to code the similar
   
if splashScreen <>nul Then DrawImage(splashScreen, (DeviceWidth()-splashScreen.Width())/2,(DeviceHeight()-splashScreen.Height())/2)



TeaBoy(Posted 2014) [#5]
Thanks for the help Niko, but I don't think that is the issue.

I have tried the code with v78h and it works fine, compared the file asyncimageloader.monkey (v78h) with
the same file that is part of v79d and they are the same, so It can't be that :(

having a dig myself, but am pretty lost at the moment.


nikoniko(Posted 2014) [#6]
You are right.

Seems it related to
***** v79d *****
....
Fixed private methods/functions not really private.

Fixed private const/var/class decls in modules causing name clashes.



nikoniko(Posted 2014) [#7]
I write keyword Public before Init declarations as on screenshot



It helps but...


TeaBoy(Posted 2014) [#8]
Yay! putting 'Public' on line 149 within mojo/graphics.monkey fixes the issue.

I just couldn't find those methods, you certainly have eagle eyes!

Many thanks Niko great job!

Спасибо :)


mdgunn(Posted 2014) [#9]
#EDIT - After much confusion in a related area I've found a solution to my problem.
Can confirm adding Public on the line mentioned works.

Wish LoadImageAsync worked on GLFW but I managed to do some image downloads using in GLFW using a different method (http://www.monkey-x.com/Community/posts.php?topic=8494). Maybe I have to have 2 different bits of code for the same thing for each target (one for HTML5 and one for GLFW).