Prepare all attributes once per resolution change

Property definitions

gamnit $ ShadowContext :: prepare_once
	# Prepare all attributes once per resolution change
	fun prepare_once(display: GamnitDisplay, shadow_resolution: Int)
	do
		assert display.gl_extensions.has("GL_OES_depth_texture")

		# Set aside the real screen framebuffer name
		var screen_framebuffer = glGetIntegerv(gl_FRAMEBUFFER_BINDING, 0)
		self.screen_framebuffer = screen_framebuffer

		# Framebuffer
		var framebuffer = glGenFramebuffers(1).first
		glBindFramebuffer(gl_FRAMEBUFFER, framebuffer)
		assert glIsFramebuffer(framebuffer)
		self.light_view_framebuffer = framebuffer
		var gl_error = glGetError
		assert gl_error == gl_NO_ERROR else print_error gl_error

		# Depth & texture/color
		var textures = glGenTextures(1)
		self.depth_texture = textures[0]
		gl_error = glGetError
		assert gl_error == gl_NO_ERROR else print_error gl_error

		resize(display, shadow_resolution)

		# Array buffer
		buffer_array = glGenBuffers(1).first
		glBindBuffer(gl_ARRAY_BUFFER, buffer_array)
		assert glIsBuffer(buffer_array)
		gl_error = glGetError
		assert gl_error == gl_NO_ERROR else print_error gl_error

		## coord
		var data = new Array[Float]
		data.add_all([-1.0, -1.0, 0.0,
	                   1.0, -1.0, 0.0,
	                  -1.0,  1.0, 0.0,
	                   1.0,  1.0, 0.0])
		## tex_coord
		data.add_all([0.0, 0.0,
		              1.0, 0.0,
		              0.0, 1.0,
		              1.0, 1.0])
		var c_data = new GLfloatArray.from(data)
		glBufferData(gl_ARRAY_BUFFER, data.length*4, c_data.native_array, gl_STATIC_DRAW)

		glBindBuffer(gl_ARRAY_BUFFER, 0)

		gl_error = glGetError
		assert gl_error == gl_NO_ERROR else print_error gl_error
	end
lib/gamnit/depth/shadow.nit:197,2--247,4