How to avoid canvas.Clear - MOJO2
Monkey Forums/Monkey Programming/How to avoid canvas.Clear - MOJO2
| ||
The code below suppose to draw a line on the screen as I move my mouse, because I commented out the canvas.Clear, but for some reason MOJO 2 still clearing the canvas. Is there a command to tell MOJO 2 to not clear the canvas? On the code below you can set the #MOJO to 1 or 2 and see the problem happening. Strict #MOJO = 1 #IF MOJO=2 Import mojo2 #ELSE Import mojo #END Class MyApp Extends App Field canvas:Canvas Field isMojo2:Bool = False Method OnCreate:Int() SetUpdateRate(0) #IF MOJO=2 canvas = New Canvas #END Return 0 End Method OnRender:Int() #If MOJO=2 canvas.SetColor 1, 1, 0 canvas.DrawText("MOJO 2 Test", 0, 0) canvas.SetColor 0, 1, 0 canvas.DrawCircle(MouseX(), MouseY(), 3) canvas.Flush #Else SetColor(255, 0, 255) DrawText("MOJO 1 Test", 0, 0) SetColor(255, 0, 0) DrawCircle(MouseX(), MouseY(), 3) #EndIf Return 0 End End Function Main:Int() New MyApp Return 0 End |
| ||
Ok I got it working! I had to create a Render and use layers. Here is my new code Mark Sibly , why when I omit the canvas.Clear() the CANVAS still gets cleared? Is that a bug? Is there a way to SetClearMode(0) to the CANVAS , like it is for the Render? Strict #MOJO = 2 #IF MOJO=2 Import mojo2 #ELSE Import mojo #END Const NUM_LIGHTS:= 5 'create an orthographics projection matrix Function Mat4Ortho:Float[]( left:Float,right:Float,bottom:Float,top:Float,znear:Float,zfar:Float ) Local w:=right-left,h:=top-bottom,d:=zfar-znear Return [ 2.0/w,0,0,0, 0,2.0/h,0,0, 0,0,2.0/d,0, -(right+left)/w,-(top+bottom)/h,-(zfar+znear)/d,1 ] End Class MyLight Implements ILight 'note: x,y,z,w go in last 4 components of matrix... Field matrix:=[1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,-100.0,1.0] Field color:=[0.2,0.2,0.2,1.0] Field range:=400.0 'implement ILight interface... ' Method LightMatrix:Float[]() Return matrix End Method LightType:Int() Return 1 End Method LightColor:Float[]() Return color End Method LightRange:Float() Return range End Method LightImage:Image() Return Null End End Class MyLayer Extends DrawList Implements ILayer Field lights:=New Stack<MyLight> Field layerMatrix:=[1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0] Field layerFogColor:=[0.0,0.0,0.0,0.0] 'implement ILayer interface... ' Method LayerMatrix:Float[]() Return layerMatrix End Method LayerFogColor:Float[]() Return layerFogColor End Method LayerLightMaskImage:Image() Return Null End Method EnumLayerLights:Void( lights:Stack<ILight> ) For Local light:=Eachin Self.lights lights.Push light Next End Method OnRenderLayer:Void( drawLists:Stack<DrawList> ) drawLists.Push Self End End Class MyApp Extends App Field canvas:Canvas Field isMojo2:Bool = False Field renderer:Renderer Field layer0:MyLayer Method OnCreate:Int() SetUpdateRate(0) #IF MOJO=2 canvas = New Canvas renderer = New Renderer renderer.SetViewport(0, 0, DeviceWidth(), DeviceHeight()) renderer.SetProjectionMatrix(Mat4Ortho(0, 640, 0, 480, -1, 1)) renderer.SetAmbientLight( [0.1,0.1,0.1,1.0] ) renderer.SetClearMode(0) 'create layer 0 layer0=New MyLayer #END renderer.Layers.Push layer0 Return 0 End Method OnRender:Int() If MouseDown() #If MOJO=2 layer0.SetColor 1, 1, 0 layer0.DrawText("MOJO 2 Test", 0, 0) layer0.SetColor 0, 1, 0 layer0.DrawCircle(MouseX(), MouseY(), 3) ' canvas.SetColor 1, 1, 0 ' canvas.DrawText("MOJO 2 Test", 0, 0) ' canvas.SetColor 0, 1, 0 ' canvas.DrawCircle(MouseX(), MouseY(), 3) ' canvas.Flush renderer.Render #Else SetColor(255, 0, 255) DrawText("MOJO 1 Test", 0, 0) SetColor(255, 0, 0) DrawCircle(MouseX(), MouseY(), 3) #EndIf EndIf Return 0 End End Function Main:Int() New MyApp Return 0 End |