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