Skip to content

Commit 8921783

Browse files
WIP
1 parent 3e42fa4 commit 8921783

File tree

5 files changed

+191
-9
lines changed

5 files changed

+191
-9
lines changed

extensions/pl_draw_ext_m.c

Lines changed: 146 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/*
66
Index of this file:
77
// [SECTION] includes
8-
// [SECTION] binding apis
8+
// [SECTION] enums
99
// [SECTION] implementations
1010
*/
1111

@@ -15,6 +15,35 @@ Index of this file:
1515

1616
#include "pilotlight.h"
1717

18+
//-----------------------------------------------------------------------------
19+
// [SECTION] enums
20+
//-----------------------------------------------------------------------------
21+
22+
plPythonIntConstantPair gatDrawIntPairs[] = {
23+
24+
// plDrawFlags
25+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_NONE),
26+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_DEPTH_TEST),
27+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_DEPTH_WRITE),
28+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_CULL_FRONT),
29+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_CULL_BACK),
30+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_FRONT_FACE_CW),
31+
PL_ADD_INT_CONSTANT(PL_DRAW_FLAG_REVERSE_Z_DEPTH),
32+
33+
// plDrawRectFlags
34+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_NONE),
35+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_LEFT),
36+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_RIGHT),
37+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_LEFT),
38+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_RIGHT),
39+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_NONE),
40+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP),
41+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM),
42+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_LEFT),
43+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_RIGHT),
44+
PL_ADD_INT_CONSTANT(PL_DRAW_RECT_FLAG_ROUND_CORNERS_All)
45+
};
46+
1847
//-----------------------------------------------------------------------------
1948
// [SECTION] implementations
2049
//-----------------------------------------------------------------------------
@@ -27,7 +56,9 @@ plDrawI_add_triangle_filled(PyObject* self, PyObject* args, PyObject* kwargs)
2756
PyObject* ptPythonP0 = NULL;
2857
PyObject* ptPythonP1 = NULL;
2958
PyObject* ptPythonP2 = NULL;
30-
uint32_t uColor = PL_COLOR_32_WHITE;
59+
plDrawSolidOptions tOptions = {
60+
.uColor = PL_COLOR_32_WHITE
61+
};
3162

3263
static const char* apcKeywords[] = {
3364
"layer",
@@ -39,7 +70,7 @@ plDrawI_add_triangle_filled(PyObject* self, PyObject* args, PyObject* kwargs)
3970
};
4071

4172
if (!pl_parse("OOOO|$I", (const char**)apcKeywords, args, kwargs, __FUNCTION__,
42-
&ptPythonLayer, &ptPythonP0, &ptPythonP1, &ptPythonP2, &uColor))
73+
&ptPythonLayer, &ptPythonP0, &ptPythonP1, &ptPythonP2, &tOptions.uColor))
4374
return NULL;
4475

4576
plDrawLayer2D* ptLayer = PyCapsule_GetPointer(ptPythonLayer, "plDrawLayer2D");
@@ -48,7 +79,118 @@ plDrawI_add_triangle_filled(PyObject* self, PyObject* args, PyObject* kwargs)
4879
pl_get_vec2_from_python(ptPythonP0),
4980
pl_get_vec2_from_python(ptPythonP1),
5081
pl_get_vec2_from_python(ptPythonP2),
51-
(plDrawSolidOptions){.uColor = uColor});
82+
tOptions);
83+
84+
Py_RETURN_NONE;
85+
}
86+
87+
PyObject*
88+
plDrawI_add_line(PyObject* self, PyObject* args, PyObject* kwargs)
89+
{
90+
91+
PyObject* ptPythonLayer = NULL;
92+
PyObject* ptPythonP0 = NULL;
93+
PyObject* ptPythonP1 = NULL;
94+
95+
plDrawLineOptions tOptions = {
96+
.uColor = PL_COLOR_32_WHITE,
97+
.fThickness = 1.0f
98+
};
99+
100+
static const char* apcKeywords[] = {
101+
"layer",
102+
"p0",
103+
"p1",
104+
"uColor",
105+
"thickness",
106+
NULL,
107+
};
108+
109+
if (!pl_parse("OOO|$If", (const char**)apcKeywords, args, kwargs, __FUNCTION__,
110+
&ptPythonLayer, &ptPythonP0, &ptPythonP1, &tOptions.uColor, &tOptions.fThickness))
111+
return NULL;
112+
113+
plDrawLayer2D* ptLayer = PyCapsule_GetPointer(ptPythonLayer, "plDrawLayer2D");
114+
115+
gptDraw->add_line(ptLayer,
116+
pl_get_vec2_from_python(ptPythonP0),
117+
pl_get_vec2_from_python(ptPythonP1),
118+
tOptions);
119+
120+
Py_RETURN_NONE;
121+
}
122+
123+
PyObject*
124+
plDrawI_add_triangle(PyObject* self, PyObject* args, PyObject* kwargs)
125+
{
126+
127+
PyObject* ptPythonLayer = NULL;
128+
PyObject* ptPythonP0 = NULL;
129+
PyObject* ptPythonP1 = NULL;
130+
PyObject* ptPythonP2 = NULL;
131+
132+
plDrawLineOptions tOptions = {
133+
.uColor = PL_COLOR_32_WHITE,
134+
.fThickness = 1.0f
135+
};
136+
137+
static const char* apcKeywords[] = {
138+
"layer",
139+
"p0",
140+
"p1",
141+
"p2",
142+
"uColor",
143+
"thickness",
144+
NULL,
145+
};
146+
147+
if (!pl_parse("OOOO|$If", (const char**)apcKeywords, args, kwargs, __FUNCTION__,
148+
&ptPythonLayer, &ptPythonP0, &ptPythonP1, &ptPythonP2, &tOptions.uColor, &tOptions.fThickness))
149+
return NULL;
150+
151+
plDrawLayer2D* ptLayer = PyCapsule_GetPointer(ptPythonLayer, "plDrawLayer2D");
152+
153+
gptDraw->add_triangle(ptLayer,
154+
pl_get_vec2_from_python(ptPythonP0),
155+
pl_get_vec2_from_python(ptPythonP1),
156+
pl_get_vec2_from_python(ptPythonP2),
157+
tOptions);
158+
159+
Py_RETURN_NONE;
160+
}
161+
162+
PyObject*
163+
plDrawI_add_rect(PyObject* self, PyObject* args, PyObject* kwargs)
164+
{
165+
166+
PyObject* ptPythonLayer = NULL;
167+
PyObject* ptPythonP0 = NULL;
168+
PyObject* ptPythonP1 = NULL;
169+
170+
plDrawLineOptions tOptions = {
171+
.uColor = PL_COLOR_32_WHITE,
172+
.fThickness = 1.0f
173+
};
174+
175+
static const char* apcKeywords[] = {
176+
"layer",
177+
"pMin",
178+
"pMax",
179+
"uColor",
180+
"thickness",
181+
NULL,
182+
};
183+
184+
if (!pl_parse("OOO|$If", (const char**)apcKeywords, args, kwargs, __FUNCTION__,
185+
&ptPythonLayer, &ptPythonP0, &ptPythonP1, &tOptions.uColor, &tOptions.fThickness))
186+
return NULL;
187+
188+
plDrawLayer2D* ptLayer = PyCapsule_GetPointer(ptPythonLayer, "plDrawLayer2D");
189+
190+
gptDraw->add_rect(ptLayer,
191+
pl_get_vec2_from_python(ptPythonP0),
192+
pl_get_vec2_from_python(ptPythonP1),
193+
tOptions);
52194

53195
Py_RETURN_NONE;
54196
}

pilotlight/pl_draw_ext.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,40 @@
44

55
class plDrawI:
66

7-
def add_triangle_filled(layer : Any, p0 : Union[List[float], Tuple[float, ...]], p1 : Union[List[float], Tuple[float, ...]], p2 : Union[List[float], Tuple[float, ...]], *, uColor: int = 4294967295, **kwargs) -> None:
7+
def add_triangle_filled(layer, p0, p1, p2, *, uColor=4294967295, **kwargs):
88
return internal.plDrawI_add_triangle_filled(layer, p0, p1, p2, uColor=uColor, **kwargs)
99

10+
def add_triangle(layer, p0, p1, p2, *, uColor=4294967295, thickness=1.0, **kwargs):
11+
return internal.plDrawI_add_triangle(layer, p0, p1, p2, uColor=uColor, thickness=thickness, **kwargs)
12+
13+
def add_line(layer, p0, p1, *, uColor=4294967295, thickness=1.0, **kwargs):
14+
return internal.plDrawI_add_line(layer, p0, p1, uColor=uColor, thickness=thickness, **kwargs)
15+
16+
def add_rect(layer, pMin, pMax, *, uColor=4294967295, thickness=1.0, **kwargs):
17+
return internal.plDrawI_add_rect(layer, pMin, pMax, uColor=uColor, thickness=thickness, **kwargs)
18+
19+
########################################################################################################################
20+
# [SECTION] enums
21+
########################################################################################################################
22+
23+
# PL_DRAW_FLAG_ CONSTANTS
24+
PL_DRAW_FLAG_NONE=internal.PL_DRAW_FLAG_NONE
25+
PL_DRAW_FLAG_DEPTH_TEST=internal.PL_DRAW_FLAG_DEPTH_TEST
26+
PL_DRAW_FLAG_DEPTH_WRITE=internal.PL_DRAW_FLAG_DEPTH_WRITE
27+
PL_DRAW_FLAG_CULL_FRONT=internal.PL_DRAW_FLAG_CULL_FRONT
28+
PL_DRAW_FLAG_CULL_BACK=internal.PL_DRAW_FLAG_CULL_BACK
29+
PL_DRAW_FLAG_FRONT_FACE_CW=internal.PL_DRAW_FLAG_FRONT_FACE_CW
30+
PL_DRAW_FLAG_REVERSE_Z_DEPTH=internal.PL_DRAW_FLAG_REVERSE_Z_DEPTH
31+
32+
# PL_DRAW_RECT_FLAG_ CONSTANTS
33+
PL_DRAW_RECT_FLAG_NONE=internal.PL_DRAW_RECT_FLAG_NONE
34+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_LEFT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_LEFT
35+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_RIGHT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP_RIGHT
36+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_LEFT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_LEFT
37+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_RIGHT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM_RIGHT
38+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_NONE=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_NONE
39+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_TOP
40+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_BOTTOM
41+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_LEFT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_LEFT
42+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_RIGHT=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_RIGHT
43+
PL_DRAW_RECT_FLAG_ROUND_CORNERS_All=internal.PL_DRAW_RECT_FLAG_ROUND_CORNERS_All

sandbox/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def pl_app_update(self):
170170
# drawing API
171171
fgLayer = plStarterI.get_foreground_layer()
172172
plDrawI.add_triangle_filled(fgLayer, [50.0, 100.0], [200.0, 0.0], [100.0, 200.0])
173-
plDrawI.add_triangle_filled(fgLayer, [50.0, 300.0], [200.0, 200.0], [100.0, 400.0], uColor = 4278255360)
173+
plDrawI.add_triangle(fgLayer, [50.0, 300.0], [200.0, 200.0], [100.0, 400.0], uColor = 4278255360)
174174

175175
# io API
176176
if plIOI.is_key_pressed(PL_KEY_P):

src/pilotlight.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ pl_get_vec2_from_python(PyObject* ptValue)
152152
return tResult;
153153
}
154154

155-
plDVec3
155+
plVec3d
156156
pl_get_dvec3_from_python(PyObject* ptValue)
157157
{
158-
plDVec3 tResult = {0};
158+
plVec3d tResult = {0};
159159

160160
if (PyTuple_Check(ptValue))
161161
{
@@ -321,6 +321,9 @@ static PyMethodDef gatCommands[] =
321321

322322
// draw API
323323
PL_PYTHON_COMMAND(plDrawI_add_triangle_filled, METH_VARARGS | METH_KEYWORDS, NULL),
324+
PL_PYTHON_COMMAND(plDrawI_add_triangle, METH_VARARGS | METH_KEYWORDS, NULL),
325+
PL_PYTHON_COMMAND(plDrawI_add_line, METH_VARARGS | METH_KEYWORDS, NULL),
326+
PL_PYTHON_COMMAND(plDrawI_add_rect, METH_VARARGS | METH_KEYWORDS, NULL),
324327

325328
// ui API
326329
PL_PYTHON_COMMAND(plUiI_begin_window, METH_VARARGS | METH_KEYWORDS, NULL),
@@ -441,6 +444,9 @@ PyInit_pilotlight(void)
441444
for(uint32_t i = 0; i < PL_ARRAYSIZE(gatShaderIntPairs); i++)
442445
PyModule_AddIntConstant(ptModule, gatShaderIntPairs[i].pcName, gatShaderIntPairs[i].iValue);
443446

447+
for(uint32_t i = 0; i < PL_ARRAYSIZE(gatDrawIntPairs); i++)
448+
PyModule_AddIntConstant(ptModule, gatDrawIntPairs[i].pcName, gatDrawIntPairs[i].iValue);
449+
444450
const plApiRegistryI* ptApiRegistry = pl__python_load();
445451

446452
PyObject* ptApiRegistryCapsule = PyCapsule_New((void*)ptApiRegistry, "plApiRegistryI", NULL);

src/pilotlight.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ typedef struct _plPythonEntity
5555
bool pl_parse(char* formatstring, const char** keywords, PyObject* args, PyObject* kwargs, const char* message, ...);
5656

5757
plVec2 pl_get_vec2_from_python(PyObject*);
58-
plDVec3 pl_get_dvec3_from_python(PyObject*);
58+
plVec3d pl_get_dvec3_from_python(PyObject*);
5959
plPythonEntity pl_get_entity_from_python(PyObject*);
6060

6161
#endif // PILOTLIGHT_H

0 commit comments

Comments
 (0)