1
1
#include " include.h"
2
+ #include < SDL2/SDL2_gfxPrimitives.h>
2
3
3
4
/*
4
5
class Renderer
@@ -8,6 +9,15 @@ class Renderer
8
9
copyTo(text: Texture, x: int, y: int, [w: int, h: int])
9
10
copyFill(text: Texture, x: int, y: int, w: int, h: int)
10
11
copyFullFill(text: Texture)
12
+ drawPoint(x: int, y: int)
13
+ drawLine(x1: int, y1: int, x2: int, y2: int)
14
+ drawRect(x: int, y: int, w: int, h: int)
15
+ fillRect(x: int, y: int, w: int, h: int)
16
+ fillTriangle(x1: int, y1: int, x2: int, y2: int, x3: int, y3: int, [r: int, g: int, b:int, a: int]) #SDL2_gfx#
17
+ getColor(): r: int, g: int, b: int, a: int
18
+ setColor(r: int, g: int, b: int, a: int)
19
+ getBlendMode(): string
20
+ setBlendMode(mode: string)
11
21
*/
12
22
13
23
int render_close (lua_State* L)
@@ -212,6 +222,128 @@ int render_fillrect(lua_State* L)
212
222
return 0 ;
213
223
}
214
224
225
+ int render_filltriangle (lua_State* L)
226
+ {
227
+ auto rnd = lua_checkpointer<SDL_Renderer>(L, 1 , " LuaEngineRenderer" );
228
+
229
+ int x1 = luaL_checkinteger (L, 2 );
230
+ int y1 = luaL_checkinteger (L, 3 );
231
+ int x2 = luaL_checkinteger (L, 4 );
232
+ int y2 = luaL_checkinteger (L, 5 );
233
+ int x3 = luaL_checkinteger (L, 6 );
234
+ int y3 = luaL_checkinteger (L, 7 );
235
+
236
+ Uint8 r, g, b, a;
237
+ if (SDL_GetRenderDrawColor (rnd, &r, &g, &b, &a))
238
+ {
239
+ return SDLError (L, SDL_GetRenderDrawColor);
240
+ }
241
+ SDL_BlendMode mode;
242
+ if (SDL_GetRenderDrawBlendMode (rnd, &mode))
243
+ {
244
+ return SDLError (L, SDL_GetRenderDrawBlendMode);
245
+ }
246
+
247
+ Uint8 rr, gg, bb, aa;
248
+ rr = lua_isnone (L, 8 ) ? r : luaL_checkinteger (L, 8 );
249
+ gg = lua_isnone (L, 9 ) ? g : luaL_checkinteger (L, 9 );
250
+ bb = lua_isnone (L, 10 ) ? b : luaL_checkinteger (L, 10 );
251
+ aa = lua_isnone (L, 11 ) ? a : luaL_checkinteger (L, 11 );
252
+
253
+ int ret = filledTrigonRGBA (rnd, x1, y1 , x2, y2, x3, y3, rr, gg, bb, aa);
254
+
255
+ if (SDL_SetRenderDrawBlendMode (rnd, mode))
256
+ {
257
+ return SDLError (L, SDL_SetRenderDrawBlendMode);
258
+ }
259
+ if (SDL_SetRenderDrawColor (rnd, r, g, b, a))
260
+ {
261
+ return SDLError (L, SDL_SetRenderDrawColor);
262
+ }
263
+
264
+ if (ret)
265
+ {
266
+ return SDLError (L, filledTrigonRGBA);
267
+ }
268
+
269
+ return 0 ;
270
+ }
271
+
272
+ int render_getblendmode (lua_State* L)
273
+ {
274
+ auto rnd = lua_checkpointer<SDL_Renderer>(L, 1 , " LuaEngineRenderer" );
275
+ SDL_BlendMode mode;
276
+ if (SDL_GetRenderDrawBlendMode (rnd, &mode))
277
+ {
278
+ return SDLError (L, SDL_GetRenderDrawBlendMode);
279
+ }
280
+ switch (mode)
281
+ {
282
+ case SDL_BlendMode::SDL_BLENDMODE_ADD:
283
+ lua_pushstring (L, " add" );
284
+ break ;
285
+ case SDL_BlendMode::SDL_BLENDMODE_BLEND:
286
+ lua_pushstring (L, " blend" );
287
+ break ;
288
+ case SDL_BlendMode::SDL_BLENDMODE_INVALID:
289
+ lua_pushstring (L, " invalid" );
290
+ break ;
291
+ case SDL_BlendMode::SDL_BLENDMODE_MOD:
292
+ lua_pushstring (L, " mod" );
293
+ break ;
294
+ case SDL_BlendMode::SDL_BLENDMODE_MUL:
295
+ lua_pushstring (L, " mul" );
296
+ break ;
297
+ case SDL_BlendMode::SDL_BLENDMODE_NONE:
298
+ lua_pushstring (L, " none" );
299
+ break ;
300
+ default :
301
+ lua_pushstring (L, " unknown" );
302
+ break ;
303
+ }
304
+ return 1 ;
305
+ }
306
+
307
+ int render_setblendmode (lua_State* L)
308
+ {
309
+ auto rnd = lua_checkpointer<SDL_Renderer>(L, 1 , " LuaEngineRenderer" );
310
+ const char * modestr = luaL_checkstring (L, 2 );
311
+ SDL_BlendMode mode;
312
+ if (strcmp (modestr, " add" ) == 0 )
313
+ {
314
+ mode = SDL_BlendMode::SDL_BLENDMODE_ADD;
315
+ }
316
+ else if (strcmp (modestr, " blend" ) == 0 )
317
+ {
318
+ mode = SDL_BlendMode::SDL_BLENDMODE_BLEND;
319
+ }
320
+ else if (strcmp (modestr, " invalid" ) == 0 )
321
+ {
322
+ mode = SDL_BlendMode::SDL_BLENDMODE_INVALID;
323
+ }
324
+ else if (strcmp (modestr, " mod" ) == 0 )
325
+ {
326
+ mode = SDL_BlendMode::SDL_BLENDMODE_MOD;
327
+ }
328
+ else if (strcmp (modestr, " mul" ) == 0 )
329
+ {
330
+ mode = SDL_BlendMode::SDL_BLENDMODE_MUL;
331
+ }
332
+ else if (strcmp (modestr, " none" ) == 0 )
333
+ {
334
+ mode = SDL_BlendMode::SDL_BLENDMODE_NONE;
335
+ }
336
+ else
337
+ {
338
+ return 0 ;
339
+ }
340
+ if (SDL_SetRenderDrawBlendMode (rnd, mode))
341
+ {
342
+ return SDLError (L, SDL_SetRenderDrawBlendMode);
343
+ }
344
+ return 0 ;
345
+ }
346
+
215
347
int render_setcolor (lua_State* L)
216
348
{
217
349
auto rnd = lua_checkpointer<SDL_Renderer>(L, 1 , " LuaEngineRenderer" );
@@ -267,8 +399,11 @@ int render_new(lua_State* L)
267
399
lua_setfield_function (L, " drawLine" , render_drawline);
268
400
lua_setfield_function (L, " drawRect" , render_drawrect);
269
401
lua_setfield_function (L, " fillRect" , render_fillrect);
402
+ lua_setfield_function (L, " fillTriangle" , render_filltriangle);
270
403
lua_setfield_function (L, " getColor" , render_getcolor);
271
404
lua_setfield_function (L, " setColor" , render_setcolor);
405
+ lua_setfield_function (L, " getBlendMode" , render_getblendmode);
406
+ lua_setfield_function (L, " setBlendMode" , render_setblendmode);
272
407
lua_setfield (L, -2 , " __index" );
273
408
}
274
409
lua_setmetatable (L, -2 );
0 commit comments