Finally implemented lights like in zelda windwaker
This commit is contained in:
parent
8fe95ce5a0
commit
19ca2f28b8
@ -712,6 +712,7 @@ draw :: proc() {
|
||||
rl.BeginDrawing()
|
||||
defer rl.EndDrawing()
|
||||
rl.ClearBackground(rl.GRAY)
|
||||
render.clear_stencil()
|
||||
|
||||
runtime_world := get_runtime_world()
|
||||
world := get_world()
|
||||
@ -821,7 +822,7 @@ draw :: proc() {
|
||||
|
||||
render.draw_model(car_model, basic_shader.shader, car_matrix)
|
||||
|
||||
render.draw_point_light(0, 2, rl.YELLOW)
|
||||
render.draw_point_light(0, 2, rl.Color{255, 255, 255, 69})
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -13,6 +13,10 @@ init :: proc() {
|
||||
gl.load_up_to(3, 3, rlgl_set_proc_address)
|
||||
}
|
||||
|
||||
clear_stencil :: proc() {
|
||||
gl.Clear(gl.STENCIL_BUFFER_BIT)
|
||||
}
|
||||
|
||||
draw_model :: proc(model: rl.Model, shader: rl.Shader, transform: rl.Matrix) {
|
||||
model := model
|
||||
for i in 0 ..< model.materialCount {
|
||||
@ -26,13 +30,46 @@ draw_model :: proc(model: rl.Model, shader: rl.Shader, transform: rl.Matrix) {
|
||||
draw_point_light :: proc(pos: rl.Vector3, radius: f32, color: rl.Color) {
|
||||
rlgl.DrawRenderBatchActive()
|
||||
|
||||
gl.StencilFunc(gl.ALWAYS, 1, 0)
|
||||
defer gl.StencilFunc(gl.ALWAYS, 0, 0)
|
||||
gl.Enable(gl.STENCIL_TEST)
|
||||
defer gl.Disable(gl.STENCIL_TEST)
|
||||
{
|
||||
gl.StencilFunc(gl.ALWAYS, 1, ~u32(0))
|
||||
gl.StencilOp(gl.KEEP, gl.KEEP, gl.REPLACE)
|
||||
gl.DepthFunc(gl.GREATER)
|
||||
rlgl.DisableDepthMask()
|
||||
gl.ColorMask(false, false, false, false)
|
||||
rlgl.SetCullFace(.FRONT)
|
||||
|
||||
rlgl.SetCullFace(.FRONT)
|
||||
rl.DrawSphere(pos, radius, color)
|
||||
rl.DrawSphere(pos, radius, color)
|
||||
rlgl.DrawRenderBatchActive()
|
||||
}
|
||||
|
||||
{
|
||||
gl.StencilFunc(gl.EQUAL, 1, ~u32(0))
|
||||
gl.StencilOp(gl.ZERO, gl.ZERO, gl.ZERO)
|
||||
gl.DepthFunc(gl.LEQUAL)
|
||||
gl.ColorMask(true, true, true, true)
|
||||
rlgl.SetCullFace(.BACK)
|
||||
|
||||
rl.DrawSphere(pos, radius, color)
|
||||
rlgl.DrawRenderBatchActive()
|
||||
}
|
||||
|
||||
{
|
||||
gl.StencilOp(gl.KEEP, gl.KEEP, gl.ZERO)
|
||||
gl.DepthFunc(gl.GREATER)
|
||||
rlgl.SetCullFace(.FRONT)
|
||||
|
||||
rl.DrawSphere(pos, radius, color)
|
||||
rlgl.DrawRenderBatchActive()
|
||||
}
|
||||
|
||||
gl.StencilFunc(gl.ALWAYS, 0, ~u32(0))
|
||||
gl.StencilOp(gl.KEEP, gl.KEEP, gl.KEEP)
|
||||
rlgl.SetCullFace(.BACK)
|
||||
gl.DepthFunc(gl.LEQUAL)
|
||||
|
||||
rlgl.EnableDepthMask()
|
||||
|
||||
rlgl.DrawRenderBatchActive()
|
||||
rlgl.SetCullFace(.BACK)
|
||||
// rl.DrawMesh(mesh, rl.LoadMaterialDefault(), transform)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user