How to create a glow effect

Blitz3D Forums/Blitz3D Programming/How to create a glow effect

A little something I used in SpaceJunk (WIP)
; ***********************************************************************************
; MOD_DreamFilter

DebugLog "MOD_Dreamfilter.bb"

;Include "LIB_Render2Tex.bb"

;InitialiseR2T()

; ***********************************************************************************

; NO GLOBALS ALLOWED!

Type DreamFilter
	Field TextureSize
	Field MotionZoom#
	Field FeedbackRed,FeedbackGreen,FeedbackBlue
	Field Strength#
	Field Position#
	Field Offset#
	Field BlurMesh
	Field BlurSurface
	Field BlurTexture
	Field Show
	;Field R2THolder
End Type

Type DreamEntity
	Field Entity
	Field Show
End Type


; *********************************************************************************

Function DreamEntity_Add(entity,show=True)    ; EXCLUDE FROM DREAM RENDER

	Local e.DreamEntity = New DreamEntity
	e\Entity = Entity
	e\Show = Show
	Return Handle(e)

End Function

; *********************************************************************************

Function DreamEntity_Remove(ent)

	Local e.DreamEntity = Object.DreamEntity(ent)
	Delete e
	
End Function

; *********************************************************************************

Function DreamEntity_State(ent,state)
	Local e.DreamEntity = Object.DreamEntity(ent)
	e\Show = State
End Function


; *********************************************************************************

Function DreamFilter_Create(cam,TexSize = 256,MotionZoom#=1.022,FeedBackRed=220,FeedBackGreen=220,FeedBackBlue=220,Strength#=100,Position#=1.1,Offset#=0.001)
	
	Local d.DreamFilter = New DreamFilter
	
	
	d\Show			= True
	d\TextureSize 	= TexSize
	d\MotionZoom# 	= MotionZoom#
	d\FeedbackRed 	= FeedbackRed
	d\FeedbackGreen = FeedbackGreen
	d\FeedbackBlue 	= FeedbackBlue
	d\Strength# 	= Strength#
	d\Position#		= Position#
	d\Offset#		= Offset#

	d\BlurMesh		= CreateMesh(cam)
	d\BlurSurface 	= CreateSurface(d\BlurMesh)
	d\BlurTexture 	= CreateTexture(d\TextureSize,d\TextureSize,256+1+16+32)
	EntityTexture 	d\blurMesh, d\BlurTexture
	
;	d\R2THolder = NewRenderTexture(TexSize,TexSize)
;	rt.RenderTexture = Object.RenderTexture(d\R2THolder)
;	MakeRenderTexture(d\BlurTexture,rt)

	AddVertex   	d\BlurSurface, -1, 1, 0, 0, 0
	AddVertex   	d\BlurSurface,  1, 1, 0, 1, 0
	AddVertex   	d\BlurSurface, -1,-1, 0, 0, 1
	AddVertex   	d\BlurSurface,  1,-1, 0, 1, 1
	AddTriangle 	d\BlurSurface, 0, 1, 2
	AddTriangle 	d\BlurSurface, 3, 2, 1

	PositionEntity 	d\BlurMesh,-d\Offset#,d\Offset#, d\Position#
	ScaleEntity   	d\BlurMesh,d\MotionZoom# * d\Position#,d\MotionZoom# * d\Position#,1.0
	EntityOrder 	d\BlurMesh,  -10000
	EntityFX 		d\BlurMesh, 1
	EntityBlend    	d\BlurMesh, 3
	
	Return Handle(d)
	
End Function

; *********************************************************************************

Function DreamFilterShow(filter,show=1)

	d.DreamFilter = Object.DreamFilter(Filter)
	d\Show = show
	If show Then
		ShowEntity d\BlurMesh
	Else
		HideEntity d\BlurMesh
	EndIf
	
End Function



; *********************************************************************************

Function DreamFilter_Destroy(filter)

	d.DreamFilter = Object.DreamFilter(Filter)
	FreeTexture d\BlurTexture
	FreeEntity  d\BlurMesh
	Delete d
 	
End Function

; *********************************************************************************

Function DreamFilter_Update(cam,filter)

	d.DreamFilter = Object.DreamFilter(Filter)

	If Not d\Show Then Return

	CameraViewport 	Cam, 0, 0, d\TextureSize, d\TextureSize
	EntityColor 	d\BlurMesh, d\FeedbackRed,d\FeedbackGreen,d\FeedbackBlue
	
	For e.DreamEntity = Each DreamEntity
		If Not e\show Then HideEntity e\Entity
	Next
;	CameraRange cam,1,10
	RenderWorld 
;	CameraRange cam,1,1000
	CopyRect  		0,0,d\TextureSize,d\TextureSize, 0, 0, BackBuffer(), TextureBuffer(d\BlurTexture)
	CameraViewport 	Cam,0,0,GraphicsWidth(),GraphicsHeight()
	EntityColor 	d\BlurMesh, d\Strength# ,d\Strength# ,d\Strength# 
	
	For e.DreamEntity = Each DreamEntity
		ShowEntity e\Entity
	Next
	
End Function

Before =

And with the filter =