Ver Fonte

Cleanups.

Mark Sibly há 8 anos atrás
pai
commit
5ee4dadcd5

+ 8 - 2
modules/mojo/graphics/shader.monkey2

@@ -71,6 +71,12 @@ Class GLProgram
 			glGetActiveUniform( _glprogram,i,nameBuf.Length,Varptr length,Varptr size,Varptr type,Cast<GLchar Ptr>( nameBuf.Data ) )
 	
 			Local name:=String.FromCString( nameBuf.Data )
+			
+			Local i:=name.Find( "[" )
+			If i<>-1
+				Print "Uniform array name="+name
+				name=name.Slice( 0,i )
+			Endif
 				
 			Local location:=glGetUniformLocation( _glprogram,name )
 			If location=-1 Continue  'IE fix...
@@ -142,8 +148,8 @@ Class GLProgram
 					glUniformMatrix3fv( u.location,1,False,ublock.GetMat3fv( u.uniformId ) )
 					
 				Case GL_FLOAT_MAT4
-				
-					glUniformMatrix4fv( u.location,1,False,ublock.GetMat4fv( u.uniformId ) )
+					
+					glUniformMatrix4fv( u.location,u.size,False,ublock.GetMat4fv( u.uniformId ) )
 					
 				Case GL_SAMPLER_2D,GL_SAMPLER_CUBE
 				

+ 8 - 9
modules/mojo/graphics/texture.monkey2

@@ -423,23 +423,22 @@ Class Texture Extends Resource
 	#rem monkeydoc @hidden
 	#end	
 	Method OnDiscard() Override
-	
-		If _glSeq=glGraphicsSeq
-			glDeleteTextures( 1,Varptr _glTexture )
-		Endif
 		
-		_glSeq=0
-		_glTexture=0
+		If _discarded Return
+	
+		If _glSeq=glGraphicsSeq glDeleteTextures( 1,Varptr _glTexture )
+			
 		_discarded=True
+		_managed=Null
+		_glTexture=0
+		_glSeq=0
 	End
 	
 	#rem monkeydoc @hidden
 	#end	
 	Method Finalize() Override
 		
-		If _glSeq=glGraphicsSeq
-			glDeleteTextures( 1,Varptr _glTexture )
-		Endif
+		If Not _discarded And _glSeq=glGraphicsSeq glDeleteTextures( 1,Varptr _glTexture )
 	End
 	
 	Private

+ 23 - 26
modules/mojo/graphics/uniformblock.monkey2

@@ -88,7 +88,7 @@ Class UniformBlock Extends Resource
 	Method GetVec3fv:Float Ptr( id:Int )
 		Return GetFloatPtr( id,Type.Vec3f )
 	End
-
+	
 	'***** Vec4f *****
 	'	
 	Method SetVec4f( uniform:String,value:Vec4f )
@@ -127,6 +127,18 @@ Class UniformBlock Extends Resource
 		Return GetFloatPtr( id,Type.Mat3f )
 	End
 	
+	'***** AffineMat3f *****
+	'
+	Method SetAffineMat3f( uniform:String,value:AffineMat3f )
+		Local m:=New Mat3f( value.i.x,value.i.y,0, value.j.x,value.j.y,0, value.t.x,value.t.y,1 )
+		SetFloatData( uniform,m,Type.Mat3f )
+	End
+	
+	Method GetAffineMat3f:AffineMat3f( uniform:String )
+		Local m:=GetFloatData<Mat3f>( uniform,Type.Mat3f )
+		Return New AffineMat3f( m.i.x,m.i.y,m.j.x,m.j.y,m.k.x,m.k.y )
+	End
+	
 	'***** Mat4f *****
 	'
 	Method SetMat4f( uniform:String,value:Mat4f )
@@ -142,6 +154,7 @@ Class UniformBlock Extends Resource
 	End
 	
 	Method GetMat4fv:Float Ptr( id:Int )
+		If _uniforms[id].type=Type.Mat4fArray Return Varptr _uniforms[id].arrayData[0].i.x
 		Return GetFloatPtr( id,Type.Mat4f )
 	End
 
@@ -149,7 +162,7 @@ Class UniformBlock Extends Resource
 	'
 	Method SetMat4fArray( uniform:String,value:Mat4f[] )
 		Local id:=GetUniformId( uniform )
-		_uniforms[id].mat4fArray=value
+		_uniforms[id].arrayData=value
 		_uniforms[id].type=Type.Mat4fArray
 		_seq=_gseq
 		_gseq+=1
@@ -157,15 +170,10 @@ Class UniformBlock Extends Resource
 	
 	Method GetMat4fArray:Mat4f[]( uniform:String )
 		Local id:=GetUniformId( uniform )
-		DebugAssert( _uniforms[id].type=Type.Mat4fArray,"Invalid uniform type" )
-		Return _uniforms[id].mat4fArray
+		DebugAssert( _uniforms[id].type=Type.Mat4fArray,"Invalidate uniform type" )
+		Return _uniforms[id].arrayData
 	End
 
-	Method GetMat4fArrayv:Float Ptr( id:Int )
-		DebugAssert( _uniforms[id].type=Type.Mat4fArray,"Invalid uniform type" )
-		Return Varptr _uniforms[id].mat4fArray[0].i.x
-	End
-	
 	'***** Texture *****
 	'
 	Method SetTexture( uniform:String,value:Texture )
@@ -224,35 +232,24 @@ Class UniformBlock Extends Resource
 	
 	Struct Uniform
 		Field type:Type
-
-		Field mat4fArray:Mat4f[]
 		Field texture:Texture
-		
-		'yuck...		
-		Field fdata0:Mat4f
-		Field fdata1:Mat4f
-		Field fdata2:Mat4f
-		Field fdata3:Mat4f
-		Field fdata4:Mat4f
-		Field fdata5:Mat4f
-		Field fdata6:Mat4f
-		Field fdata7:Mat4f
+		Field arrayData:Mat4f[]
+		Field floatData:Mat4f
 		
 		Method SetFloatData<T>( t:T,type:Type )
-			Cast<T Ptr>(Varptr fdata0.i.x)[0]=t
+			Cast<T Ptr>(Varptr floatData.i.x)[0]=t
 			Self.type=type
 		End
 		
 		Method GetFloatData<T>:T()
-			Return Cast<T Ptr>(Varptr fdata0.i.x)[0]
+			Return Cast<T Ptr>(Varptr floatData.i.x)[0]
 		End
 		
 		Method GetFloatPtr:Float Ptr()
-			Return Cast<Float Ptr>(Varptr fdata0.i.x)
+			Return Cast<Float Ptr>(Varptr floatData.i.x)
 		End
-		
 	End
-	
+
 	Field _name:Int
 	Field _seq:Int
 	Field _uniforms:=New Uniform[64]