Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

renamed: khronos/GLES2Man.lua -> GLES2Man.lua

	renamed:    khronos/GLESMan.lua -> GLESMan.lua
	renamed:    khronos/OpenVG.lua -> OpenVG.lua
	renamed:    khronos/OpenVG_Utils.lua -> OpenVG_Utils.lua
	modified:   cube_texture_and_coords.lua
	renamed:    khronos/egl.lua -> egl.lua
	renamed:    khronos/egl_utils.lua -> egl_utils.lua
	renamed:    khronos/eglplatform.lua -> eglplatform.lua
	renamed:    khronos/gl.lua -> gl.lua
	renamed:    khronos/gl2.lua -> gl2.lua
	renamed:    khronos/gl2ext.lua -> gl2ext.lua
	renamed:    khronos/glext.h -> glext.h
	renamed:    vcinclude/common.lua -> interface/common.lua
	renamed:    interface/vmcs_host/vc_cec.lua -> interface/vc_cec.lua
	renamed:    interface/vmcs_host/vc_cecservice.lua -> interface/vc_cecservice.lua
	renamed:    interface/vmcs_host/vc_dispmanx.lua -> interface/vc_dispmanx.lua
	renamed:    interface/vmcs_host/vc_dispmanx_types.lua -> interface/vc_dispmanx_types.lua
	renamed:    interface/vmcs_host/vc_dispservice_x_defs.lua -> interface/vc_dispservice_x_defs.lua
	renamed:    interface/vmcs_host/vc_hdmi.lua -> interface/vc_hdmi.lua
	renamed:    interface/vmcs_host/vc_hdmi_property.lua -> interface/vc_hdmi_property.lua
	renamed:    interface/vmcs_host/vc_tvservice.lua -> interface/vc_tvservice.lua
	renamed:    interface/vmcs_host/vc_tvservice_defs.lua -> interface/vc_tvservice_defs.lua
	renamed:    interface/vmcs_host/vcgencmd.lua -> interface/vcgencmd.lua
	modified:   interface/vctypes/vc_image_types.lua
	renamed:    khronos/khrplatform.lua -> khrplatform.lua
	modified:   rpiui.lua
	new file:   test_egles_basic.lua
	modified:   test_triangle.lua
	renamed:    khronos/vgext.lua -> vgext.lua
	renamed:    khronos/vgu.lua -> vgu.lua
  • Loading branch information...
commit eed00a13dce4f8ee79cbc70c9b0d107571e06bb2 1 parent 06bafcf
William Adams authored

Showing 30 changed files with 250 additions and 33 deletions. Show diff stats Hide diff stats

  1. 0  {khronos → }/GLES2Man.lua
  2. 0  {khronos → }/GLESMan.lua
  3. 0  {khronos → }/OpenVG.lua
  4. 0  {khronos → }/OpenVG_Utils.lua
  5. +2 2 cube_texture_and_coords.lua
  6. 0  {khronos → }/egl.lua
  7. +21 11 {khronos → }/egl_utils.lua
  8. +3 1 {khronos → }/eglplatform.lua
  9. 0  {khronos → }/gl.lua
  10. 0  {khronos → }/gl2.lua
  11. 0  {khronos → }/gl2ext.lua
  12. 0  {khronos → }/glext.h
  13. 0  {vcinclude → interface}/common.lua
  14. 0  interface/{vmcs_host → }/vc_cec.lua
  15. 0  interface/{vmcs_host → }/vc_cecservice.lua
  16. 0  interface/{vmcs_host → }/vc_dispmanx.lua
  17. 0  interface/{vmcs_host → }/vc_dispmanx_types.lua
  18. 0  interface/{vmcs_host → }/vc_dispservice_x_defs.lua
  19. 0  interface/{vmcs_host → }/vc_hdmi.lua
  20. 0  interface/{vmcs_host → }/vc_hdmi_property.lua
  21. 0  interface/{vmcs_host → }/vc_tvservice.lua
  22. 0  interface/{vmcs_host → }/vc_tvservice_defs.lua
  23. 0  interface/{vmcs_host → }/vcgencmd.lua
  24. +0 1  interface/vctypes/vc_image_types.lua
  25. 0  {khronos → }/khrplatform.lua
  26. +2 7 rpiui.lua
  27. +187 0 test_egles_basic.lua
  28. +35 11 test_triangle.lua
  29. 0  {khronos → }/vgext.lua
  30. 0  {khronos → }/vgu.lua
0  khronos/GLES2Man.lua → GLES2Man.lua
File renamed without changes
0  khronos/GLESMan.lua → GLESMan.lua
File renamed without changes
0  khronos/OpenVG.lua → OpenVG.lua
File renamed without changes
0  khronos/OpenVG_Utils.lua → OpenVG_Utils.lua
File renamed without changes
4 cube_texture_and_coords.lua
@@ -3,7 +3,7 @@ local ffi = require "ffi"
3 3
4 4 -- Spatial coordinates for the cube
5 5
6   -quadx = ffi.new("char[?]", 6*4*3, {
  6 +quadx = ffi.new("GLbyte[?]", 6*4*3, {
7 7 -- FRONT
8 8 -10, -10, 10,
9 9 10, -10, 10,
@@ -42,7 +42,7 @@ quadx = ffi.new("char[?]", 6*4*3, {
42 42 });
43 43
44 44 -- Texture coordinates for the quad.
45   -texCoords = ffi.new("float[?]", 6 * 4 * 2, {
  45 +texCoords = ffi.new("GLfloat[?]", 6 * 4 * 2, {
46 46 0, 0,
47 47 0, 1,
48 48 1, 0,
0  khronos/egl.lua → egl.lua
File renamed without changes
32 khronos/egl_utils.lua → egl_utils.lua
@@ -16,7 +16,6 @@ EglDisplay_mt = {
16 16 }
17 17
18 18 EglDisplay.new = function(api, dispid)
19   - api = api or EGL.EGL_OPENVG_API
20 19 local dpy
21 20
22 21 if not dispid then
@@ -32,9 +31,13 @@ EglDisplay.new = function(api, dispid)
32 31 setmetatable(obj, EglDisplay_mt);
33 32
34 33 obj:Initialize();
35   - obj:BindToAPI(api);
36   - obj:ChooseConfig();
37   - obj:CreateContext();
  34 +
  35 + if api then
  36 + -- api = api or EGL.EGL_OPENVG_API
  37 + assert(obj:BindToAPI(api), "Could not bind to API");
  38 + end
  39 + assert(obj:ChooseConfig(), "Could not choose config");
  40 + assert(obj:CreateContext(), "Could not create context");
38 41
39 42 return obj
40 43 end
@@ -46,7 +49,7 @@ end
46 49 EglDisplay.Initialize = function(self)
47 50 local pmajor = ffi.new("EGLint[1]");
48 51 local pminor = ffi.new("EGLint[1]");
49   - local res = EGL.Lib.eglInitialize(self.Handle, pmajor, pminor);
  52 + local res = EGL.Lib.eglInitialize(self.Handle, nil, nil);
50 53 assert(res ~= EGL.EGL_FALSE);
51 54
52 55 return self, pmajor[0], pminor[0];
@@ -70,17 +73,22 @@ EglDisplay.ChooseConfig = function(self, attribute_list)
70 73 EGL.EGL_GREEN_SIZE, 8,
71 74 EGL.EGL_BLUE_SIZE, 8,
72 75 EGL.EGL_ALPHA_SIZE, 8,
73   - EGL.EGL_SURFACE_TYPE, EGL.EGL_WINDOW_BIT,
  76 + EGL.EGL_SURFACE_TYPE, EGL.EGL_WINDOW_BIT,
74 77 EGL.EGL_NONE);
75 78
76   - local pconfig = ffi.new("EGLConfig[1]");
  79 + local pconfig = ffi.new("EGLConfig[10]");
77 80 local pnum_config = ffi.new("EGLint[1]");
78 81
79   - local res = EGL.Lib.eglChooseConfig(self.Handle, attribute_list, pconfig, 1, pnum_config);
80   -
  82 + local res = EGL.Lib.eglChooseConfig(self.Handle, attribute_list, pconfig, 10, pnum_config);
  83 +
81 84 assert(res == EGL.EGL_TRUE);
82 85
  86 + local num_config = pnum_config[0]
  87 + print("EglDisplay.ChooseConfig(): num: ", num_config);
  88 +
83 89 self.Config = pconfig[0];
  90 +
  91 + return self.Config;
84 92 end
85 93
86 94 EglDisplay.CreateContext = function(self, config)
@@ -111,8 +119,10 @@ EglDisplay.MakeCurrent = function(self, surface, context)
111 119 end
112 120
113 121 EglDisplay.SwapBuffers = function(self, surface)
114   - surface = surface or self.Surface;
115   - local res = EGL.Lib.eglSwapBuffers(self.Handle, surface);
  122 + surface = surface or self.Surface;
  123 + local res = EGL.Lib.eglSwapBuffers(self.Handle, surface);
  124 +
  125 + return res;
116 126 end
117 127
118 128
4 khronos/eglplatform.lua → eglplatform.lua
... ... @@ -1,9 +1,11 @@
1 1
2 2
3   ---#include "../KHR/khrplatform.h"
4 3
5 4 local ffi = require "ffi"
6 5
  6 +require "khrplatform"
  7 +
  8 +
7 9 ffi.cdef[[
8 10 typedef void *EGLNativeDisplayType;
9 11 typedef void *EGLNativePixmapType;
0  khronos/gl.lua → gl.lua
File renamed without changes
0  khronos/gl2.lua → gl2.lua
File renamed without changes
0  khronos/gl2ext.lua → gl2ext.lua
File renamed without changes
0  khronos/glext.h → glext.h
File renamed without changes
0  vcinclude/common.lua → interface/common.lua
File renamed without changes
0  interface/vmcs_host/vc_cec.lua → interface/vc_cec.lua
File renamed without changes
0  interface/vmcs_host/vc_cecservice.lua → interface/vc_cecservice.lua
File renamed without changes
0  interface/vmcs_host/vc_dispmanx.lua → interface/vc_dispmanx.lua
File renamed without changes
0  interface/vmcs_host/vc_dispmanx_types.lua → interface/vc_dispmanx_types.lua
File renamed without changes
0  interface/vmcs_host/vc_dispservice_x_defs.lua → interface/vc_dispservice_x_defs.lua
File renamed without changes
0  interface/vmcs_host/vc_hdmi.lua → interface/vc_hdmi.lua
File renamed without changes
0  interface/vmcs_host/vc_hdmi_property.lua → interface/vc_hdmi_property.lua
File renamed without changes
0  interface/vmcs_host/vc_tvservice.lua → interface/vc_tvservice.lua
File renamed without changes
0  interface/vmcs_host/vc_tvservice_defs.lua → interface/vc_tvservice_defs.lua
File renamed without changes
0  interface/vmcs_host/vcgencmd.lua → interface/vcgencmd.lua
File renamed without changes
1  interface/vctypes/vc_image_types.lua
@@ -7,7 +7,6 @@ local ffi = require "ffi"
7 7 This file gets included by the VCE compiler, which gets confused
8 8 easily by the VCOS headers. So cannot include vcos.h here.
9 9 --]]
10   ---require "../vcos/vcos_stdint"
11 10
12 11 ffi.cdef[[
13 12 /* We have so many rectangle types; let's try to introduce a common one. */
0  khronos/khrplatform.lua → khrplatform.lua
File renamed without changes
9 rpiui.lua
... ... @@ -1,13 +1,8 @@
1   -package.path = package.path..";khronos/?.lua"
2   -
3 1
4 2 local ffi = require "ffi"
5 3
6 4 local BCMHost = require "BcmHost"
7 5
8   -require "khrplatform"
9   -
10   -
11 6
12 7 --[[
13 8 GLESv2 must be loaded before EGL or there will be
@@ -18,7 +13,7 @@ require "khrplatform"
18 13 to be loaded first.
19 14 --]]
20 15 local GLESv1 = require "GLESMan"
21   -local GLESv2 = require "GLES2Man";
  16 +--local GLESv2 = require "GLES2Man";
22 17
23 18 local EGL = require "egl_utils";
24 19
@@ -36,7 +31,7 @@ return {
36 31 BCMHost = BCMHost;
37 32
38 33 GLES = GLESv1;
39   - GLES2 = GLESv2;
  34 +-- GLES2 = GLESv2;
40 35
41 36 EGL = EGL;
42 37 OpenVG = OpenVG;
187 test_egles_basic.lua
... ... @@ -0,0 +1,187 @@
  1 +
  2 +
  3 +-- A rotating cube rendered with OpenGL|ES. Three images used as textures on the cube faces.
  4 +
  5 +local ffi = require "ffi"
  6 +local bit = require "bit"
  7 +local lshift = bit.lshift
  8 +local rshift = bit.rshift
  9 +
  10 +local DMX = require "DisplayManX"
  11 +
  12 +local rpiui = require "rpiui"
  13 +
  14 +local GLES = rpiui.GLES
  15 +local EGL = rpiui.EGL
  16 +local OpenVG = rpiui.OpenVG;
  17 +
  18 +
  19 +
  20 +--local egldisplay = EGL.Display.new(EGL.EGL_OPENGL_ES_API);
  21 +local egldisplay = EGL.Display.new();
  22 +assert(egldisplay, "EglDisplay not created");
  23 +
  24 +local dmxdisplay = DMX.DMXDisplay();
  25 +assert(dmxdisplay, "Could not initialize DMXDisplay");
  26 +
  27 +
  28 +local screenWidth = 320;
  29 +local screenHeight = 240;
  30 +
  31 +
  32 +local IMAGE_SIZE = 128;
  33 +
  34 +--[[
  35 +/***********************************************************
  36 + * Name: init_ogl
  37 + *
  38 + * Arguments:
  39 + * CUBE_STATE_T *state - holds OGLES model info
  40 + *
  41 + * Description: Sets the display, OpenGL|ES context and screen stuff
  42 + *
  43 + * Returns: void
  44 + *
  45 + ***********************************************************/
  46 +--]]
  47 +
  48 +function createNativeWindow(dmxdisplay, width, height)
  49 +
  50 + local dst_rect = VC_RECT_T(0,0,width, height);
  51 + local src_rect = VC_RECT_T(0,0, lshift(width, 16), lshift(height,16));
  52 +
  53 + --local alpha = VC_DISPMANX_ALPHA_T(ffi.C.DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS,255,0);
  54 + --local dmxview = dmxdisplay:CreateElement(dst_rect, nil, src_rect, 0, DISPMANX_PROTECTION_NONE, alpha);
  55 + local dmxview = dmxdisplay:CreateElement(dst_rect, nil, src_rect);
  56 + assert(dmxview, "FAILURE: Did not create dmxview");
  57 +
  58 + -- create an EGL window surface
  59 + local nativewindow = ffi.new("EGL_DISPMANX_WINDOW_T");
  60 + nativewindow.element = dmxview.Handle;
  61 + nativewindow.width = width;
  62 + nativewindow.height = height;
  63 +
  64 + return nativewindow;
  65 +end
  66 +
  67 +
  68 +function init_ogl(state)
  69 +
  70 + -- Get size of the display window
  71 + state.screen_width, state.screen_height = dmxdisplay:GetSize();
  72 + state.screen_width = screenWidth;
  73 + state.screen_height = screenHeight;
  74 + print("SCREEN SIZE: ", state.screen_width, state.screen_height);
  75 +
  76 + -- Setup the EGL Display
  77 + state.display = egldisplay;
  78 +
  79 + state.nativewindow = createNativeWindow(dmxdisplay, state.screen_width, state.screen_height);
  80 + state.surface = egldisplay:CreateWindowSurface(state.nativewindow);
  81 + print("SURFACE: ", state.surface);
  82 +
  83 + -- connect the context to the surface
  84 + state.display:MakeCurrent();
  85 +
  86 + -- Set background color and clear buffers
  87 + glClearColor(0.15, 0.25, 0.35, 1.0);
  88 + glClear( GL_COLOR_BUFFER_BIT );
  89 + glClear( GL_DEPTH_BUFFER_BIT );
  90 +end
  91 +
  92 +
  93 +
  94 +
  95 +
  96 +
  97 +
  98 +--[[
  99 +***********************************************************
  100 +* Name: init_model_proj
  101 +*
  102 +* Arguments:
  103 +* CUBE_STATE_T *state - holds OGLES model info
  104 +*
  105 +* Description: Sets the OpenGL|ES model to default values
  106 +*
  107 +* Returns: void
  108 +*
  109 +**********************************************************
  110 +--]]
  111 +function init_model_proj(state)
  112 +
  113 + local nearp = 1.0;
  114 + local farp = 500.0;
  115 + local hht;
  116 + local hwd;
  117 +
  118 + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
  119 +
  120 + glViewport(0, 0, state.screen_width, state.screen_height);
  121 +
  122 + glMatrixMode(GL_PROJECTION);
  123 + glLoadIdentity();
  124 +
  125 + hht = nearp * math.tan(45.0 / 2.0 / 180.0 * math.pi);
  126 + hwd = hht * state.screen_width / state.screen_height;
  127 +
  128 + glFrustumf(-hwd, hwd, -hht, hht, nearp, farp);
  129 +
  130 +
  131 + reset_model(state);
  132 +end
  133 +
  134 +
  135 +
  136 +
  137 +--[[
  138 +/***********************************************************
  139 + * Name: redraw_scene
  140 + *
  141 + * Arguments:
  142 + * CUBE_STATE_T *state - holds OGLES model info
  143 + *
  144 + * Description: Draws the model and calls eglSwapBuffers
  145 + * to render to screen
  146 + *
  147 + * Returns: void
  148 + *
  149 + ***********************************************************/
  150 +--]]
  151 +function redraw_scene(state)
  152 +
  153 + -- Start with a clear screen
  154 + glClear( GL_COLOR_BUFFER_BIT );
  155 + glClear( GL_DEPTH_BUFFER_BIT );
  156 +
  157 + glFlush();
  158 +
  159 + print("SWAP: ", state.display:SwapBuffers());
  160 +end
  161 +
  162 +
  163 +
  164 +-- ==============================================================================
  165 +
  166 +function main()
  167 + -- Clear application state
  168 + local state = {
  169 + distance_inc = 0,
  170 + }
  171 +
  172 + -- Start OGLES
  173 + init_ogl(state);
  174 +
  175 + redraw_scene(state);
  176 +
  177 + redraw_scene(state);
  178 +
  179 + -- Sleep for a second so we can see the results
  180 + local seconds = 5
  181 + print( string.format("Sleeping for %d seconds...", seconds ));
  182 + ffi.C.sleep( seconds )
  183 +
  184 + return 0;
  185 +end
  186 +
  187 +main();
46 test_triangle.lua
@@ -7,24 +7,31 @@ local bit = require "bit"
7 7 local lshift = bit.lshift
8 8 local rshift = bit.rshift
9 9
  10 +local DMX = require "DisplayManX"
  11 +
10 12 local rpiui = require "rpiui"
  13 +
11 14 local GLES = rpiui.GLES
12 15 local EGL = rpiui.EGL
  16 +local OpenVG = rpiui.OpenVG;
13 17
14   -local DMX = require "DisplayManX"
15 18
16 19
17 20 require "cube_texture_and_coords";
18 21
19 22
20   -local egldisplay = EGL.Display.new(EGL.EGL_OPENGL_ES_API);
21   ---local egldisplay = EGL.Display.new();
  23 +--local egldisplay = EGL.Display.new(EGL.EGL_OPENGL_ES_API);
  24 +local egldisplay = EGL.Display.new();
22 25 assert(egldisplay, "EglDisplay not created");
23 26
24 27 local dmxdisplay = DMX.DMXDisplay();
25 28 assert(dmxdisplay, "Could not initialize DMXDisplay");
26 29
27 30
  31 +local screenWidth = 640;
  32 +local screenHeight = 480;
  33 +
  34 +
28 35 local IMAGE_SIZE = 128;
29 36
30 37 --[[
@@ -46,6 +53,8 @@ function createNativeWindow(dmxdisplay, width, height)
46 53 local dst_rect = VC_RECT_T(0,0,width, height);
47 54 local src_rect = VC_RECT_T(0,0, lshift(width, 16), lshift(height,16));
48 55
  56 + --local alpha = VC_DISPMANX_ALPHA_T(ffi.C.DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS,255,0);
  57 + --local dmxview = dmxdisplay:CreateElement(dst_rect, nil, src_rect, 0, DISPMANX_PROTECTION_NONE, alpha);
49 58 local dmxview = dmxdisplay:CreateElement(dst_rect, nil, src_rect);
50 59 assert(dmxview, "FAILURE: Did not create dmxview");
51 60
@@ -63,13 +72,16 @@ function init_ogl(state)
63 72
64 73 -- Get size of the display window
65 74 state.screen_width, state.screen_height = dmxdisplay:GetSize();
  75 + state.screen_width = screenWidth;
  76 + state.screen_height = screenHeight;
66 77 print("SCREEN SIZE: ", state.screen_width, state.screen_height);
67 78
68 79 -- Setup the EGL Display
69 80 state.display = egldisplay;
  81 +
70 82 state.nativewindow = createNativeWindow(dmxdisplay, state.screen_width, state.screen_height);
71 83 state.surface = egldisplay:CreateWindowSurface(state.nativewindow);
72   - print("SURFACE: ", state.surface, err);
  84 + print("SURFACE: ", state.surface);
73 85
74 86 -- connect the context to the surface
75 87 state.display:MakeCurrent();
@@ -210,7 +222,7 @@ function reset_model(state)
210 222 state.rot_angle_x = 45;
211 223 state.rot_angle_y = 30;
212 224 state.rot_angle_z = 0;
213   - state.rot_angle_x_inc = 0.5;
  225 + state.rot_angle_x_inc = 0;
214 226 state.rot_angle_y_inc = 0.5;
215 227 state.rot_angle_z_inc = 0;
216 228
@@ -230,12 +242,11 @@ end
230 242 *
231 243 **********************************************************
232 244 --]]
  245 +
233 246 function init_model_proj(state)
234 247
235 248 local nearp = 1.0;
236 249 local farp = 500.0;
237   - local hht;
238   - local hwd;
239 250
240 251 glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
241 252
@@ -244,8 +255,8 @@ function init_model_proj(state)
244 255 glMatrixMode(GL_PROJECTION);
245 256 glLoadIdentity();
246 257
247   - hht = nearp * math.tan(45.0 / 2.0 / 180.0 * math.pi);
248   - hwd = hht * state.screen_width / state.screen_height;
  258 + local hht = nearp * math.tan(45.0 / 2.0 / 180.0 * math.pi);
  259 + local hwd = hht * state.screen_width / state.screen_height;
249 260
250 261 glFrustumf(-hwd, hwd, -hht, hht, nearp, farp);
251 262
@@ -393,10 +404,12 @@ function redraw_scene(state)
393 404 glRotatef(90, 0, 0, 1 ); -- back face normal along z axis
394 405 glDrawArrays( GL_TRIANGLE_STRIP, 4, 4);
395 406
  407 +
396 408 glBindTexture(GL_TEXTURE_2D, state.tex[2]);
397 409 glRotatef(90, 1, 0, 0 ); -- left face normal along x axis
398 410 glDrawArrays( GL_TRIANGLE_STRIP, 8, 4);
399 411
  412 +
400 413 glBindTexture(GL_TEXTURE_2D, state.tex[3]);
401 414 glRotatef(90, 1, 0, 0 ); -- right face normal along x axis
402 415 glDrawArrays( GL_TRIANGLE_STRIP, 12, 4);
@@ -413,6 +426,7 @@ function redraw_scene(state)
413 426
414 427 glDisable(GL_TEXTURE_2D);
415 428
  429 +
416 430 state.display:SwapBuffers();
417 431 end
418 432
@@ -440,7 +454,17 @@ function main()
440 454
441 455 -- Clear application state
442 456 local state = {
443   - distance_inc = 0,
  457 + -- model rotation vector and direction
  458 + rot_angle_x_inc = 0;
  459 + rot_angle_y_inc = 0;
  460 + rot_angle_z_inc = 0;
  461 + -- current model rotation angles
  462 + rot_angle_x = 0;
  463 + rot_angle_y = 0;
  464 + rot_angle_z = 0;
  465 + -- current distance from camera
  466 + distance = 0;
  467 + distance_inc = 0;
444 468 }
445 469
446 470 -- Start OGLES
@@ -454,7 +478,7 @@ function main()
454 478
455 479 while not terminate do
456 480
457   - --usleep(5*1000);
  481 + ffi.C.sleep(1);
458 482 update_model(state);
459 483 redraw_scene(state);
460 484 end
0  khronos/vgext.lua → vgext.lua
File renamed without changes
0  khronos/vgu.lua → vgu.lua
File renamed without changes

0 comments on commit eed00a1

Please sign in to comment.
Something went wrong with that request. Please try again.