/
default.render_script
98 lines (68 loc) · 3.29 KB
/
default.render_script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
local camera = require("defmaterial.camera_helper")
function init(self)
self.gui_pred = render.predicate({"gui"})
self.text_pred = render.predicate({"text"})
self.threede_pred = render.predicate({"3d"})
self.threede_transparent_pred = render.predicate({"3d_transparent"})
self.threede_sprite_pred = render.predicate({"3d_sprite"})
self.clear_color = vmath.vector4(0, 0, 0, 0)
self.clear_color.x = sys.get_config("render.clear_color_red", 0)
self.clear_color.y = sys.get_config("render.clear_color_green", 0)
self.clear_color.z = sys.get_config("render.clear_color_blue", 0)
self.clear_color.w = sys.get_config("render.clear_color_alpha", 0)
self.timer = 0
end
function update(self)
self.timer = self.timer + 0.01
camera.window_width = render.get_window_width()
camera.window_height = render.get_window_height()
----------------------------------------------------------------------------------------
-- setup viewport and clear the screen
render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())
render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0})
-- setup state (we need to enable depth testing for 3D stuff)
render.enable_state(render.STATE_DEPTH_TEST)
render.set_depth_mask(true)
--[[
-- create view and projection matrices
local cam_lookat = vmath.vector3(0.0,0.0,0.0)
local cam_pos = vmath.vector3(-10.0,10.0 * math.abs(math.sin(self.timer * 0.2) * 3),1.0 + math.sin(self.timer) * 3 * 4)
--local cam_pos = vmath.vector3(0.0,0.0,20.0) -- this moves the camera further away
local cam_up = vmath.vector3(0,1,0)
local view_mtx = vmath.matrix4_look_at(cam_pos, cam_lookat, cam_up)
local fov = (math.pi / 180.0) * 60.0 -- 60 degrees
local proj_mtx = vmath.matrix4_perspective(fov, render.get_window_width() / render.get_window_height(), 0.1, 100.0)
--]]
-- set matrices
render.set_view(camera.view_matrix)
render.set_projection(camera.proj_matrix)
-- draw cube predicate
render.draw(self.threede_pred)
--
render.draw_debug3d()
render.disable_state(render.STATE_DEPTH_TEST)
render.disable_state(render.STATE_STENCIL_TEST)
render.enable_state(render.STATE_BLEND)
render.set_blend_func(render.BLEND_SRC_ALPHA, render.BLEND_ONE_MINUS_SRC_ALPHA)
render.enable_state(render.STATE_DEPTH_TEST)
render.set_depth_mask(false)
render.draw(self.threede_transparent_pred)
render.draw(self.threede_sprite_pred)
render.set_depth_mask(true)
render.disable_state(render.STATE_DEPTH_TEST)
render.disable_state(render.STATE_CULL_FACE)
render.set_view(vmath.matrix4())
render.set_projection(vmath.matrix4_orthographic(0, render.get_window_width(), 0, render.get_window_height(), -1, 1))
render.enable_state(render.STATE_STENCIL_TEST)
render.draw(self.gui_pred)
render.draw(self.text_pred)
render.disable_state(render.STATE_STENCIL_TEST)
render.draw_debug2d()
end
function on_message(self, message_id, message)
if message_id == hash("clear_color") then
self.clear_color = message.color
elseif message_id == hash("set_view_projection") then
self.view = message.view
end
end