Mark Sibly 8 anni fa
parent
commit
bfc204d023

+ 6 - 1
modules/gles20/gles20.monkey2

@@ -97,6 +97,12 @@ Alias GLclampf:Float
 Alias GLintptr:Long
 Alias GLsizeiptr:Long
 
+#If __TARGET__="windows" or __MOBILE_TARGET__ or __WEB_TARGET__
+Const GL_ES_VERSION_2_0:=1
+#Else
+Const GL_ES_VERSION_2_0:=0
+#Endif
+
 Extern
 
 Struct GLchar="char"
@@ -106,7 +112,6 @@ Struct GLcchar="const char"
 End
 
 '${CONSTS}
-Const GL_ES_VERSION_2_0:Int
 Const GL_DEPTH_BUFFER_BIT:Int
 Const GL_STENCIL_BUFFER_BIT:Int
 Const GL_COLOR_BUFFER_BIT:Int

+ 24 - 0
modules/mojo/graphics/glexts/glexts.monkey2

@@ -8,10 +8,16 @@ Namespace mojo.graphics.glexts
 
 #Endif
 
+Const GL_DRAW_BUFFER:=$0c01
+
+Const GL_READ_BUFFER:=$0c01
+
 Const GL_HALF_FLOAT:Int=$8D61
 
 Const GL_MAX_COLOR_ATTACHMENTS:=$8CDF
 
+'Const GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:=$8CD9
+
 'Const GL_COLOR_ATTACHMENT0:Int=$8cE0
 Const GL_COLOR_ATTACHMENT1:Int=$8CE1
 Const GL_COLOR_ATTACHMENT2:Int=$8CE2
@@ -31,6 +37,9 @@ Const GL_COLOR_ATTACHMENT15:Int=$8CEF
 
 #If __TARGET__="windows" Or __MOBILE_TARGET__ Or __WEB_TARGET__
 
+Const GL_draw_buffer:Bool=False
+Const GL_read_buffer:Bool=False
+
 Extern
 
 Const GL_draw_buffers:Bool="bbGLexts::GL_draw_buffers"
@@ -41,9 +50,21 @@ Const GL_depth_texture:bool="bbGLexts::GL_depth_texture"
 Function glDrawBuffers( n:Int,bufs:GLenum Ptr )="bbGLexts::glDrawBuffers"
 
 Function InitGLexts()="bbGLexts::init"
+	
+Public
+	
+Function glDrawBuffer( mode:GLenum )
+	RuntimeError( "glDrawBuffer unsupported" )
+End
+
+Function glReadBuffer( mode:GLenum )
+	RuntimeError( "glReadBuffer unsupported" )
+End
 
 #Elseif __TARGET__="macos" Or __TARGET__="linux"
 
+Const GL_draw_buffer:Bool=True
+Const GL_read_buffer:Bool=True
 Const GL_draw_buffers:Bool=True
 Const GL_texture_float:Bool=True
 Const GL_texture_half_float:bool=True
@@ -51,6 +72,8 @@ Const GL_depth_texture:bool=True
 
 Extern
 
+Function glDrawBuffer( mode:GLenum )
+Function glReadBuffer( mode:GLenum )
 Function glDrawBuffers( n:Int,bufs:GLenum Ptr )
 	
 Public
@@ -73,3 +96,4 @@ Function InitGLexts()
 End
 
 #Endif
+

+ 9 - 3
modules/mojo/graphics/graphicsdevice.monkey2

@@ -400,6 +400,8 @@ Class GraphicsDevice
 	Global _glSeq:Int
 	Global _current:GraphicsDevice
 	Global _defaultFbo:GLint
+	Global _defaultDrawBuf:GLint
+	Global _defaultReadBuf:GLint
 	
 	Method Init()
 		_depthFunc=DepthFunc.Less
@@ -410,8 +412,13 @@ Class GraphicsDevice
 	End
 	
 	Function InitGL()
+		
 		InitGLexts()
+		
 		glGetIntegerv( GL_FRAMEBUFFER_BINDING,Varptr _defaultFbo )
+		
+		If GL_draw_buffer glGetIntegerv( GL_DRAW_BUFFER,Varptr _defaultDrawBuf )
+		If GL_read_buffer glGetIntegerv( GL_READ_BUFFER,Varptr _defaultReadBuf )
 	End
 	
 	Method FlushTarget()
@@ -447,9 +454,8 @@ Class GraphicsDevice
 			Else
 				glBindFramebuffer( GL_FRAMEBUFFER,_defaultFbo )
 
-'				upsets macos...				
-'				Local bufs:GLenum=GL_BACK
-'				glDrawBuffers( 1,Varptr bufs )
+				If GL_draw_buffer glDrawBuffer( _defaultDrawBuf )
+				If GL_read_buffer glReadBuffer( _defaultReadBuf )
 
 			Endif
 

+ 32 - 4
modules/mojo/graphics/rendertarget.monkey2

@@ -9,7 +9,7 @@ Class RenderTarget Extends Resource
 		
 		_depthTexture=depthTexture
 		
-		_drawBufs=New GLenum[ _colorTextures.Length]
+		_drawBufs=New GLenum[_colorTextures.Length]
 		
 		For Local i:=0 Until _colorTextures.Length
 			_drawBufs[i]=_colorTextures[i] ? GL_COLOR_ATTACHMENT0+i Else GL_NONE
@@ -23,6 +23,30 @@ Class RenderTarget Extends Resource
 	
 	'***** INTERNAL *****
 	
+	Method CheckStatus()
+		
+		Local status:=gles20.glCheckFramebufferStatus( GL_FRAMEBUFFER )
+		
+		If status=GL_FRAMEBUFFER_COMPLETE Return
+		
+		Local err:=""
+		
+		Select status
+		Case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+			err="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
+		Case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+			err="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"
+'		Case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+'			err="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS"
+		Case GL_FRAMEBUFFER_UNSUPPORTED
+			err="GL_FRAMEBUFFER_UNSUPPORTED"
+		Default
+			err="GL_FRAMEBUFFER_?????"
+		End
+		
+		RuntimeError( "Framebuffer incomplete: status="+err )
+	End
+	
 	Method Bind()
 		
 		glBindFramebuffer( GL_FRAMEBUFFER,ValidateGLFramebuffer() )
@@ -30,6 +54,12 @@ Class RenderTarget Extends Resource
 		If glexts.GL_draw_buffers 
 			glDrawBuffers( _drawBufs.Length,_drawBufs.Data )
 		Endif
+		
+		#If __TARGET__="macos" Or __TARGET__="linux"
+		glReadBuffer( GL_NONE )
+		#endif
+		
+		CheckStatus()
 	End
 	
 	Private
@@ -63,9 +93,7 @@ Class RenderTarget Extends Resource
 			glFramebufferTexture2D( GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,_depthTexture.ValidateGLTexture(),0 )
 			
 		Endif
-
-		Assert( glCheckFramebufferStatus( GL_FRAMEBUFFER )=GL_FRAMEBUFFER_COMPLETE,"Incomplete framebuffer" )
-			
+		
 		_glSeq=glGraphicsSeq
 
 		glPopFramebuffer()