-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathreqdebugdraw_server.lua
More file actions
103 lines (81 loc) · 4.26 KB
/
reqdebugdraw_server.lua
File metadata and controls
103 lines (81 loc) · 4.26 KB
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
99
100
101
102
103
local function task_draw_current_scene(thread, tri_pos_x, tri_pos_y, tri_pos_z, tri_u_x, tri_u_y, tri_u_z, tri_v_x, tri_v_y, tri_v_z,
frustum_pos_x, frustum_pos_y, frustum_pos_z, frustum_right_x, frustum_right_y, frustum_right_z,
frustum_up_x, frustum_up_y, frustum_up_z, frustum_front_x, frustum_front_y, frustum_front_z)
-- Write the triangle into a file on the server for debug purposes.
do
local trifile = "debug_tri_draw.lua";
local tricode =
"local triangle = createPlane(\n" ..
" createVector(" .. tri_pos_x .. ", " .. tri_pos_y .. ", " .. tri_pos_z .. "),\n" ..
" createVector(" .. tri_u_x .. ", " .. tri_u_y .. ", " .. tri_u_z .. "),\n" ..
" createVector(" .. tri_v_x .. ", " .. tri_v_y .. ", " .. tri_v_z .. ")\n" ..
");\n" ..
"local frustum = createViewFrustum(\n" ..
" createVector(" .. frustum_pos_x .. ", " .. frustum_pos_y .. ", " .. frustum_pos_z .. "),\n" ..
" createVector(" .. frustum_right_x .. ", " .. frustum_right_y .. ", " .. frustum_right_z .. "),\n" ..
" createVector(" .. frustum_up_x .. ", " .. frustum_up_y .. ", " .. frustum_up_z .. "),\n" ..
" createVector(" .. frustum_front_x .. ", " .. frustum_front_y .. ", " .. frustum_front_z .. ")\n" ..
");\n" ..
"local primType = \"tri\";";
if (fileExists(trifile)) then
fileDelete(trifile);
end
local debugFile = fileCreate(trifile);
if (debugFile) then
fileWrite(debugFile, tricode);
fileClose(debugFile);
end
end
local triangle = createPlane(
createVector(tri_pos_x, tri_pos_y, tri_pos_z),
createVector(tri_u_x, tri_u_y, tri_u_z),
createVector(tri_v_x, tri_v_y, tri_v_z)
);
local frustum = createViewFrustum(
createVector(frustum_pos_x, frustum_pos_y, frustum_pos_z),
createVector(frustum_right_x, frustum_right_y, frustum_right_z),
createVector(frustum_up_x, frustum_up_y, frustum_up_z),
createVector(frustum_front_x, frustum_front_y, frustum_front_z)
);
local bbuf = create_backbuffer(640, 480, 255, 255, 0, 50);
local dbuf = createDepthBuffer(640, 480, 1);
local time_start = getTickCount();
do
local gotToDraw, numDrawn, numSkipped = draw_plane_on_bbuf(frustum, bbuf, dbuf, triangle, true, "tri", true);
if ( gotToDraw ) then
outputDebugString( "drawn " .. numDrawn .. " pixels (skipped " .. numSkipped .. ")" );
end
end
local time_end = getTickCount();
local ms_diff = ( time_end - time_start );
outputDebugString( "render time: " .. ms_diff .. "ms" );
taskUpdate( 1, "creating backbuffer color composition string" );
local bbuf_width_ushort = num_to_ushort_bytes( bbuf.width );
local bbuf_height_ushort = num_to_ushort_bytes( bbuf.height );
local pixels_str = table.concat(bbuf.items);
local bbuf_string =
pixels_str ..
( bbuf_width_ushort ..
bbuf_height_ushort );
taskUpdate( false, "sending backbuffer to clients (render time: " .. ms_diff .. "ms)" );
local players = getElementsByType("player");
for m,n in ipairs(players) do
triggerClientEvent(n, "onServerTransmitImage", root, bbuf_string);
end
outputDebugString("sent backbuffer to clients");
end
addEvent("request_drawtri", true);
addEventHandler("request_drawtri", root,
function(tri_pos_x, tri_pos_y, tri_pos_z, tri_u_x, tri_u_y, tri_u_z, tri_v_x, tri_v_y, tri_v_z,
frustum_pos_x, frustum_pos_y, frustum_pos_z,
frustum_right_x, frustum_right_y, frustum_right_z,
frustum_up_x, frustum_up_y, frustum_up_z,
frustum_front_x, frustum_front_y, frustum_front_z)
spawnTask(task_draw_current_scene, tri_pos_x, tri_pos_y, tri_pos_z, tri_u_x, tri_u_y, tri_u_z, tri_v_x, tri_v_y, tri_v_z,
frustum_pos_x, frustum_pos_y, frustum_pos_z,
frustum_right_x, frustum_right_y, frustum_right_z,
frustum_up_x, frustum_up_y, frustum_up_z,
frustum_front_x, frustum_front_y, frustum_front_z
);
end
);