Pārlūkot izejas kodu

Added ParticleSystem.

Mark Sibly 8 gadi atpakaļ
vecāks
revīzija
a89a9a8671

+ 21 - 0
modules/mojo3d/graphics/dynamicobject.monkey2

@@ -0,0 +1,21 @@
+
+Namespace mojo3d
+
+Class DynamicObject
+
+	Method SetDynamicProperty<T>( name:String,value:T )
+	
+		If Not _dynprops _dynprops=New StringMap<Object>
+		
+		_dynprops[name]=value
+	End
+	
+	Method GetDynamicProperty<T>:T( name:String )
+	
+		Return _dynprops ? Cast<T>( _dynprops[name] ) Else Null
+	End
+	
+	Private
+	
+	Field _dynprops:StringMap<Object>
+End

+ 1 - 3
modules/mojo3d/graphics/entity.monkey2

@@ -3,7 +3,7 @@ Namespace mojo3d.graphics
 
 #rem monkeydoc The Entity class.
 #end
-Class Entity
+Class Entity Extends DynamicObject
 	
 	#rem monkeydoc Copied signal.
 	
@@ -285,8 +285,6 @@ Class Entity
 		Invalidate()
 	End
 	
-	'***** Methods ******
-
 	#rem monkeydoc Hides the entity and all of its children
 	#end
 	Method Hide()

+ 190 - 0
modules/mojo3d/graphics/particlebuffer.monkey2

@@ -0,0 +1,190 @@
+
+Namespace mojo3d
+
+Class ParticleBuffer
+
+	Method New( length:Int=15000 )
+	
+		_length=length
+
+		_vbuffer=New VertexBuffer( Vertex3fFormat.Instance,_length )
+		
+		_uniforms=New UniformBlock( 4 )
+		
+		Local vertices:=_vbuffer.AddVertices( _length )
+		
+		libc.memset( vertices,0,_vbuffer.Pitch*_length )
+
+		Gravity=New Vec3f( 0,-9.81,0 )
+		Duration=5.0
+		Fade=0.0			
+		Colors=New Color[]( Color.White )		
+		ConeAngle=30		
+		MinVelocity=20.0	
+		MinVelocity=24.0	
+		MinSize=8.0			
+		MaxSize=12.0		
+	End
+
+	Property Length:Int()
+	
+		Return _length
+	End
+
+	Property Gravity:Vec3f()
+	
+		Return _uniforms.GetVec3f( "Gravity" )
+	
+	Setter( gravity:Vec3f )
+	
+		_uniforms.SetVec3f( "Gravity",gravity )
+	End
+	
+	Property Duration:Float()
+	
+		Return _duration
+	
+	Setter( duration:Float )
+	
+		_uniforms.SetFloat( "Duration",duration )
+		
+		_duration=duration
+	End
+	
+	Property Fade:Float ()
+	
+		Return _uniforms.GetFloat( "Fade" )
+		
+	Setter( fade:Float )
+	
+		_uniforms.SetFloat( "Fade",fade )
+	End
+	
+	Property Colors:Color[]()
+
+		Return _colors
+		
+	Setter( colors:Color[] )
+	
+		If Not colors colors=New Color[]( Color.White )
+	
+		_colors=colors
+	End
+	
+	Property ConeAngle:Float()
+	
+		Return _coneAngle
+	
+	Setter( angle:Float )
+	
+		_coneAngle=angle
+	End
+	
+	Property MinVelocity:Float()
+	
+		Return _minVelocity
+	
+	Setter( velocity:Float )
+	
+		_minVelocity=velocity
+	End
+	
+	Property MaxVelocity:Float()
+	
+		Return _maxVelocity
+	
+	Setter( velocity:Float )
+	
+		_maxVelocity=velocity
+	End
+	
+	Property MinSize:Float()
+	
+		Return _minSize
+	
+	Setter( size:Float )
+	
+		_minSize=size
+	End
+	
+	Property MaxSize:Float()
+	
+		Return _maxSize
+	
+	Setter( size:Float )
+	
+		_maxSize=size
+	End
+	
+	
+	Internal
+	
+	Method OnRender( rq:RenderQueue,material:Material,instance:Entity )
+	
+		Local time:=rq.Time
+
+		If Not _time
+			_time=time
+			Return
+		Endif
+		
+		Local frames:=Int( (time-_time) * 60 )
+		
+		If frames
+
+			Local n:=Min( Int( Float(_length)/60.0/_duration * frames ),_length )
+			
+			local timeStep:=frames * (1.0/60.0) / n
+			
+			For Local i:=0 Until n
+			
+				AddParticle( _time )
+				
+				_time+=timeStep
+				
+			Next
+
+		Endif
+		
+		rq.AddRenderOp( material,_uniforms,instance,_vbuffer,Null,1,_length,0 )
+	End		
+	
+	Private
+	
+	Field _length:Int
+	Field _vbuffer:VertexBuffer
+	Field _uniforms:UniformBlock
+	Field _duration:Float
+	
+	Field _colors:Color[]
+	Field _coneAngle:Float
+	Field _minVelocity:Float
+	Field _maxVelocity:Float
+	Field _minSize:Float
+	Field _maxSize:Float
+	
+	Field _time:Float
+	Field _index:Int
+
+	Method AddParticle( time:Float )
+	
+		Local vx:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
+		Local vy:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
+		Local sp:=Float( Rnd( _minVelocity,_maxVelocity ) )
+		Local velocity:=New Vec3f( vx,vy,1.0 ).Normalize() * sp
+			
+		Local vertex:=Cast<Vertex3f Ptr>( _vbuffer.Data )+_index
+		
+		_index+=1 
+		
+		If _index=_length _index=0
+		
+		vertex->position=velocity											'velocity
+		vertex->texCoord0=New Vec2f( time,Rnd( _minSize,_maxSize ) )		'time, size
+		vertex->tangent=_colors[ Rnd( _colors.Length ) ]					'color
+		
+		_vbuffer.Invalidate()
+	End
+	
+End
+

+ 91 - 0
modules/mojo3d/graphics/particlematerial.monkey2

@@ -0,0 +1,91 @@
+
+Namespace mojo3d.graphics
+
+#rem monkeydoc The ParticleMaterial class.
+#end
+Class ParticleMaterial Extends Material
+	
+	#rem monkeydoc Creates a new particle material.
+	#end	
+	Method New()
+
+		Local shader:="material-particle",defs:=Renderer.GetCurrent().ShaderDefs
+			
+		SetShader( Shader.Open( shader,defs ) )
+		
+		BlendMode=BlendMode.Additive
+		CullMode=CullMode.None
+		
+		ColorTexture=Texture.ColorTexture( Color.White )
+		ColorFactor=Color.White
+		Gravity=New Vec3f( 0,-9.81,0 )
+		Duration=10.0
+		Fade=0.0
+		
+	End
+	
+	Method New( material:ParticleMaterial )
+	
+		Super.New( material )
+	End
+	
+	#rem monkeydoc Creates a copy of the particle material.
+	#end
+	Method Copy:ParticleMaterial() Override
+	
+		Return New ParticleMaterial( Self )
+	End
+	
+	Property ColorTexture:Texture()
+		
+		Return Uniforms.GetTexture( "ColorTexture" )
+	
+	Setter( texture:Texture )
+		
+		Uniforms.SetTexture( "ColorTexture",texture )
+	End
+	
+	Property ColorFactor:Color()
+	
+		Return Uniforms.GetColor( "ColorFactor" )
+		
+	Setter( color:Color )
+	
+		Uniforms.SetColor( "ColorFactor",color )
+	End
+	
+	Property Gravity:Vec3f()
+	
+		Return Uniforms.GetVec3f( "Gravity" )
+	
+	Setter( gravity:Vec3f )
+	
+		Uniforms.SetVec3f( "Gravity",gravity )
+	End
+	
+	Property Duration:Float()
+	
+		Return _duration
+	
+	Setter( duration:Float )
+	
+		Uniforms.SetFloat( "Duration",duration )
+		
+		_duration=duration
+	End
+	
+	Property Fade:Float ()
+	
+		Return Uniforms.GetFloat( "Fade" )
+		
+	Setter( fade:Float )
+	
+		Uniforms.SetFloat( "Fade",fade )
+	End
+
+	Private
+	
+	Field _duration:Float
+
+End
+

+ 103 - 0
modules/mojo3d/graphics/particlesystem.monkey2

@@ -0,0 +1,103 @@
+
+Namespace mojo3d
+
+Class ParticleSystem Extends Entity
+
+	#rem monkeydoc Creates a new particle system.
+	#end
+	Method New( particleCount:Int=15000,parent:Entity=Null )
+		Super.New( parent )
+		
+		_pbuffer=New ParticleBuffer( particleCount )
+		
+		_material=New ParticleMaterial
+
+		Show()
+	End
+
+	Method New( particleBuffer:ParticleBuffer,material:ParticleMaterial,parent:Entity=Null )
+		Super.New( parent )
+		
+		_pbuffer=particleBuffer
+		
+		_material=material
+		
+		Show()
+	End
+
+	#rem monkeydoc Copies the particle system.
+	#end	
+	Method Copy:ParticleSystem( parent:Entity=Null ) Override
+		
+		Local copy:=New ParticleSystem( Self,parent )
+		
+		CopyComplete( copy )
+		
+		Return copy
+	End
+	
+	Property ParticleBuffer:ParticleBuffer()
+	
+		Return _pbuffer
+		
+	Setter( pbuffer:ParticleBuffer )
+	
+		_pbuffer=pbuffer
+	End
+
+	#rem monkeydoc Material used to render the particle system.
+	
+	This must currently be an instance of a SpriteMaterial.
+	
+	#end	
+	Property Material:ParticleMaterial()
+		
+		Return _material
+	
+	Setter( material:ParticleMaterial )
+	
+		_material=material
+	End
+	
+	Protected
+
+	#rem monkeydoc @hidden
+	#End		
+	Method New( psystem:ParticleSystem,parent:Entity )
+		Super.New( psystem,parent )
+		
+		_pbuffer=psystem._pbuffer
+		
+		_material=psystem._material
+		
+		Show()
+	End
+	
+	#rem monkeydoc @hidden
+	#End		
+	Method OnShow() Override
+		
+		Scene.ParticleSystems.Add( Self )
+	End
+	
+	#rem monkeydoc @hidden
+	#End		
+	Method OnHide() Override
+		
+		Scene.ParticleSystems.Remove( Self )
+	End
+	
+	Internal
+	
+	Method OnRender( rq:RenderQueue )
+	
+		_pbuffer.OnRender( rq,_material,Self )
+	End
+
+	Private
+	
+	Field _pbuffer:ParticleBuffer
+	
+	Field _material:ParticleMaterial
+	
+End

+ 27 - 6
modules/mojo3d/graphics/renderer.monkey2

@@ -110,8 +110,10 @@ Class Renderer
 			_csmSplitDepths[i]=camera.Near+_csmSplits[i-1]*(camera.Far-camera.Near)
 		Next
 		_csmSplitDepths[4]=camera.Far
+		
+		Local time:=Float( Now() )
 
-		_runiforms.SetFloat( "Time",Now() )
+		_runiforms.SetFloat( "Time",time )
 		
 		_runiforms.SetTexture( "ShadowCSMTexture",_csmTexture )
 		_runiforms.SetVec4f( "ShadowCSMSplits",New Vec4f( _csmSplitDepths[1],_csmSplitDepths[2],_csmSplitDepths[3],_csmSplitDepths[4] ) )
@@ -141,6 +143,8 @@ Class Renderer
 		
 		_renderQueue.Clear()
 		
+		_renderQueue.Time=time
+		
 		For Local model:=Eachin _renderScene.Models
 			
 			_renderQueue.AddShadowOps=model.CastsShadow
@@ -148,6 +152,15 @@ Class Renderer
 			model.OnRender( _renderQueue )
 		Next
 		
+		_spriteQueue.Clear()
+		
+		_spriteQueue.Time=time
+		
+		For Local psystem:=Eachin _renderScene.ParticleSystems
+		
+			psystem.OnRender( _spriteQueue )
+		End
+		
 		'***** Set render camera *****
 
 		_renderCamera=camera
@@ -163,8 +176,6 @@ Class Renderer
 		_runiforms.SetFloat( "DepthNear",_renderCamera.Near )
 		_runiforms.SetFloat( "DepthFar",_renderCamera.Far )
 		
-		_spriteQueue.Clear()
-		
 		_spriteBuffer.AddSprites( _spriteQueue,_renderScene.Sprites,_renderCamera )
 		
 		OnRender( scene,camera,device )
@@ -519,6 +530,7 @@ Class Renderer
 		
 		_runiforms.SetMat4f( "ViewMatrix",viewMatrix )
 		_runiforms.SetMat4f( "ProjectionMatrix",projMatrix )
+		_runiforms.SetMat4f( "ViewProjectionMatrix",projMatrix * viewMatrix )
 		_runiforms.SetMat4f( "InverseProjectionMatrix",-projMatrix )
 		
 		Local instance:Entity=_renderCamera
@@ -535,6 +547,7 @@ Class Renderer
 				Local modelViewProjMat:=projMatrix * modelViewMat
 				Local modelViewNormMat:=~-modelViewMat.m
 					
+				_iuniforms.SetMat4f( "ModelMatrix",modelMat )
 				_iuniforms.SetMat4f( "ModelViewMatrix",modelViewMat )
 				_iuniforms.SetMat4f( "ModelViewProjectionMatrix",modelViewProjMat )
 				_iuniforms.SetMat3f( "ModelViewNormalMatrix",modelViewNormMat )
@@ -548,14 +561,22 @@ Class Renderer
 				
 				_device.Shader=material.Shader
 				_device.BindUniformBlock( material.Uniforms )
-				If material.BlendMode<>BlendMode.Opaque _device.BlendMode=material.BlendMode
+				If material.BlendMode<>BlendMode.Opaque
+					_device.BlendMode=material.BlendMode
+				Endif
 				_device.CullMode=material.CullMode
 				
 			Endif
 			
+			If op.uniforms _device.BindUniformBlock( op.uniforms )
+						
 			_device.VertexBuffer=op.vbuffer
-			_device.IndexBuffer=op.ibuffer
-			_device.RenderIndexed( op.order,op.count,op.first )
+			If op.ibuffer
+				_device.IndexBuffer=op.ibuffer
+				_device.RenderIndexed( op.order,op.count,op.first )
+			Else
+				_device.Render( op.order,op.count,op.first )
+			Endif
 			
 		Next
 	End

+ 25 - 1
modules/mojo3d/graphics/renderqueue.monkey2

@@ -5,6 +5,7 @@ Namespace mojo3d.graphics
 #end
 Class RenderOp
 	Field material:Material
+	Field uniforms:UniformBlock
 	Field vbuffer:VertexBuffer
 	Field ibuffer:IndexBuffer
 	Field instance:Entity
@@ -17,6 +18,15 @@ End
 #rem monkeydoc @hidden
 #end
 Class RenderQueue
+
+	Property Time:Float()
+	
+		Return _time
+		
+	Setter( time:Float )
+	
+		_time=time
+	End
 	
 	Property OpaqueOps:Stack<RenderOp>()
 		
@@ -62,6 +72,19 @@ Class RenderQueue
 		Endif
 		
 	End
+
+	Method AddRenderOp( material:Material,uniforms:UniformBlock,instance:Entity,vbuffer:VertexBuffer,ibuffer:IndexBuffer,order:Int,count:Int,first:Int )
+		Local op:=New RenderOp
+		op.material=material
+		op.uniforms=uniforms
+		op.instance=instance
+		op.vbuffer=vbuffer
+		op.ibuffer=ibuffer
+		op.order=order
+		op.count=count
+		op.first=first
+		AddRenderOp( op )
+	End
 	
 	Method AddRenderOp( material:Material,vbuffer:VertexBuffer,ibuffer:IndexBuffer,order:Int,count:Int,first:Int )
 		Local op:=New RenderOp
@@ -100,7 +123,8 @@ Class RenderQueue
 	End
 	
 	Private
-	
+
+	Field _time:float	
 	Field _opaqueOps:=New Stack<RenderOp>
 	Field _transparentOps:=New Stack<RenderOp>
 	Field _shadowOps:=New Stack<RenderOp>

+ 7 - 1
modules/mojo3d/graphics/scene.monkey2

@@ -3,7 +3,7 @@ Namespace mojo3d.graphics
 
 #rem monkeydoc The Scene class.
 #end
-Class Scene
+Class Scene Extends DynamicObject
 
 	#rem monkeydoc Creates a new scene.
 	#end
@@ -181,6 +181,11 @@ Class Scene
 		Return _sprites
 	End
 	
+	Property ParticleSystems:Stack<ParticleSystem>()
+	
+		Return _psystems
+	End
+	
 	Private
 	
 	Global _current:Scene
@@ -200,5 +205,6 @@ Class Scene
 	Field _models:=New Stack<Model>
 	Field _terrains:=New Stack<Terrain>
 	Field _sprites:=New Stack<Sprite>
+	Field _psystems:=New Stack<ParticleSystem>
 			
 End

+ 73 - 0
modules/mojo3d/graphics/shaders/material-particle.glsl

@@ -0,0 +1,73 @@
+//@renderpasses 0
+
+//renderer uniforms
+
+uniform float r_Time;
+
+uniform mat4 r_ViewProjectionMatrix;
+
+//instance uniforms
+
+//uniform mat4 i_ModelViewProjectionMatrix;
+
+uniform mat4 i_ModelMatrix;
+
+//material uniforms
+
+uniform sampler2D m_ColorTexture;
+
+uniform vec4 m_ColorFactor;
+
+//pbuffer uniforms
+
+uniform vec3 x_Gravity;		//gravity of particle
+
+uniform float x_Duration;	//duration of particle
+
+uniform float x_Fade;		//start fade out time
+
+//varyings...
+
+varying vec4 v_Color;
+
+//@vertex
+
+attribute vec3 a_Position;		//velocity
+
+attribute vec2 a_TexCoord0;		//s=time, t=size
+
+attribute vec4 a_Tangent;		//color
+
+void main(){
+
+	float t=(r_Time-a_TexCoord0.s);
+	
+	float a=1.0-clamp( (t-x_Fade)/(x_Duration-x_Fade),0.0,1.0 );
+	
+	v_Color=m_ColorFactor * vec4( a_Tangent.rgb,a_Tangent.a * a );
+	
+	vec4 position=i_ModelMatrix * vec4( a_Position * t,1.0 );
+	
+	position.xyz+=x_Gravity * t * t * .5;
+	
+	gl_Position=r_ViewProjectionMatrix * position;
+	
+	gl_PointSize=a_TexCoord0.t/gl_Position.w;
+}
+
+//@fragment
+
+void main(){
+
+	vec4 tcolor=texture2D( m_ColorTexture,gl_PointCoord );
+
+	vec3 color=pow( tcolor.rgb,vec3( 2.2 ) ) * v_Color.rgb * v_Color.a;
+	
+	float alpha=tcolor.a * v_Color.a;
+	
+#if defined( MX2_SRGBOUTPUT )
+	gl_FragColor=vec4( pow( color,vec3( 1.0/2.2 ) ),alpha );
+#else
+	gl_FragColor=vec4( color,alpha );
+#endif
+}

+ 1 - 1
modules/mojo3d/graphics/shaders/material-sprite.glsl

@@ -40,6 +40,6 @@ void main(){
 #if defined( MX2_SRGBOUTPUT )
 	gl_FragColor=vec4( pow( color,vec3( 1.0/2.2 ) ),alpha );
 #else
-	gl_FragColor=vec4( color,alpha );
+	gl_FragColor=vec4( color * alpha,alpha );
 #endif
 }

+ 9 - 1
modules/mojo3d/mojo3d.monkey2

@@ -12,6 +12,8 @@ Using mojo..
 Using mojo3d..
 Using gles20..
 
+#Import "graphics/dynamicobject"
+
 #Import "graphics/util3d"
 #Import "graphics/mesh"
 #Import "graphics/meshprims"
@@ -20,8 +22,15 @@ Using gles20..
 #Import "graphics/light"
 #Import "graphics/model"
 #Import "graphics/terrain"
+
 #Import "graphics/sprite"
 #Import "graphics/spritebuffer"
+#Import "graphics/spritematerial"
+
+#Import "graphics/particlesystem"
+#Import "graphics/particlebuffer"
+#Import "graphics/particlematerial"
+
 #Import "graphics/scene"
 #Import "graphics/loader.monkey2"
 #Import "graphics/gltf2"
@@ -45,4 +54,3 @@ Using gles20..
 #Import "graphics/material"
 #Import "graphics/pbrmaterial"
 #Import "graphics/watermaterial"
-#Import "graphics/spritematerial"

+ 4 - 4
modules/mojo3d/tests/ducks.monkey2

@@ -140,13 +140,13 @@ Function Main()
 	
 	Local config:=New StringMap<String>
 
-'	config["mojo3d_renderer"]="deffered"		'defeault on non-mobile targets.
+	config["mojo3d_renderer"]="deffered"		'defeault on non-mobile targets.
 
-	config["mojo3d_renderer"]="forward-direct"	'default on mobile targets. depth buffer must be enabled.
+'	config["mojo3d_renderer"]="forward-direct"	'default on mobile targets. depth buffer must be enabled.
  
-	'config["mojo3d_renderer"]="forward"
+' config["mojo3d_renderer"]="forward"
 
-	config["GL_depth_buffer_enabled"]=1
+'	config["GL_depth_buffer_enabled"]=1
 	
 	New AppInstance( config )
 	

+ 108 - 0
modules/mojo3d/tests/particles.monkey2

@@ -0,0 +1,108 @@
+Namespace myapp
+
+#Import "<std>"
+#Import "<mojo>"
+#Import "<mojo3d>"
+
+#Import "assets/"
+
+#Import "util"
+
+Using std..
+Using mojo..
+Using mojo3d..
+
+Class MyWindow Extends Window
+	
+	Field _scene:Scene
+	
+	Field _camera:Camera
+	
+	Field _light:Light
+	
+	Field _ground:Model
+	
+	Field _particles:ParticleSystem
+	
+	Method New( title:String="Simple mojo app",width:Int=640,height:Int=480,flags:WindowFlags=WindowFlags.Resizable )
+
+		Super.New( title,width,height,flags )
+		
+		_scene=Scene.GetCurrent()
+		
+		_scene.SkyTexture=Texture.Load( "asset::miramar-skybox.jpg",TextureFlags.FilterMipmap|TextureFlags.Cubemap )
+		
+		'create camera
+		'
+		_camera=New Camera
+		_camera.Near=.1
+		_camera.Far=100
+		_camera.Move( 0,1,-1 )
+		
+		'create light
+		'
+		_light=New Light
+		_light.Rotate( 60,45,0 )	'aim directional light 'down' - Pi/2=90 degrees.
+		_light.ShadowsEnabled=false
+		
+		'create ground
+		'
+		_ground=Model.CreateBox( New Boxf( -50,-1,-50,50,0,50 ),1,1,1,New PbrMaterial( Color.DarkGrey ) )
+		
+		_particles=New ParticleSystem( 15000 )
+		_particles.RotateX( -90 )	'point upwards!
+		
+		Local pbuffer:=_particles.ParticleBuffer
+		pbuffer.Gravity=New Vec3f( 0,-9.81,0 )	'gravity in world space in m/s^2.
+		pbuffer.Duration=2.5		'how long a single particle lasts in seconds.
+		pbuffer.Fade=0.0			'how long before paticle starts fading out in seconds.
+		pbuffer.Colors=New Color[]( Color.White,Color.Yellow,Color.Orange,Color.Red )
+		pbuffer.ConeAngle=30		'angle of particle emission cone.
+		pbuffer.MinVelocity=10.0		'min particle velocity.
+		pbuffer.MaxVelocity=10.0		'max particle velocity.
+		pbuffer.MinSize=16.0			'min particle size.
+		pbuffer.MaxSize=16.0		'max particle size.
+		
+		For Local an:=0 Until 360 Step 45
+			Local pivot:=New Entity
+			pivot.RotateY( an )
+			pivot.MoveZ( 20 )
+			
+			_particles.Copy( pivot )
+		Next
+		
+		_particles.SetDynamicProperty( "blah",New IntStack )
+		
+		_particles.GetDynamicProperty<IntStack>( "blah" ).Push( 10 )
+		
+		
+		'particles.AddParticles( 5000 )
+		
+	End
+	
+	Method OnRender( canvas:Canvas ) Override
+	
+		RequestRender()
+		
+		util.Fly( _camera,Self )
+		
+		_scene.Render( canvas,_camera )
+		
+		canvas.DrawText( "Width="+Width+", Height="+Height+", FPS="+App.FPS,0,0 )
+	End
+	
+End
+
+Function Main()
+	
+	Local config:=New StringMap<String>
+
+'	config["mojo3d_renderer"]="forward"
+'	config["GL_depth_buffer_enabled"]=1
+
+	New AppInstance( config )
+	
+	New MyWindow
+	
+	App.Run()
+End

+ 2 - 2
modules/mojo3d/tests/sprites.monkey2

@@ -97,8 +97,8 @@ Function Main()
 	
 	Local config:=New StringMap<String>
 
-	config["mojo3d_renderer"]="forward"
-	config["GL_depth_buffer_enabled"]=1
+'	config["mojo3d_renderer"]="forward"
+'	config["GL_depth_buffer_enabled"]=1
 
 	New AppInstance( config )