refactor, libc made optional
This commit is contained in:
+15
-15
@@ -22,9 +22,9 @@ static inline com_vec_t com_gem_vec_project_clip(com_mat_t a, com_vec_t b) {
|
||||
com_vec_t result;
|
||||
|
||||
#define CASE(m_c, m_n) \
|
||||
result.a[m_c] = (((int64_t)a.a[m_n * 4 + 0] * b.s.x) + \
|
||||
((int64_t)a.a[m_n * 4 + 1] * b.s.y) + \
|
||||
((int64_t)a.a[m_n * 4 + 2] * b.s.z) + a.a[m_n * 4 + 3]) >> \
|
||||
result.a[m_c] = (((int64_t)a.a[m_n * 4 + 0] * b.a[0]) + \
|
||||
((int64_t)a.a[m_n * 4 + 1] * b.a[1]) + \
|
||||
((int64_t)a.a[m_n * 4 + 2] * b.a[2]) + a.a[m_n * 4 + 3]) >> \
|
||||
COM_FIX_FRACBITS;
|
||||
|
||||
CASE(0, 0);
|
||||
@@ -51,9 +51,9 @@ static inline com_vec_t com_gem_vec_project_clip(com_mat_t a, com_vec_t b) {
|
||||
* determining new view-lying clipped triangles. */
|
||||
static inline uint8_t com_gem_clip_vis_project(com_vec_t a, com_pnt_t *out) {
|
||||
uint8_t mask = 0;
|
||||
if (a.s.x < -a.s.z || a.s.x > a.s.z)
|
||||
if (a.a[0] < -a.a[2] || a.a[0] > a.a[2])
|
||||
mask ^= COM_GEM_VERTEX_CLIPPED_X;
|
||||
if (a.s.y < -a.s.z || a.s.y > a.s.z)
|
||||
if (a.a[1] < -a.a[2] || a.a[1] > a.a[2])
|
||||
mask ^= COM_GEM_VERTEX_CLIPPED_Y;
|
||||
out->a[0] = com_fix_div(a.a[0], a.a[2]) / 480 + 240;
|
||||
out->a[1] = com_fix_div(a.a[1], a.a[2]) / 640 + 320;
|
||||
@@ -62,14 +62,14 @@ static inline uint8_t com_gem_clip_vis_project(com_vec_t a, com_pnt_t *out) {
|
||||
|
||||
static inline void com_gem_draw_triangle(com_pnt_t v0, com_pnt_t v1,
|
||||
com_pnt_t v2, uint8_t *out) {
|
||||
int minX = com_vec_min(com_vec_from(v0.s.x, v1.s.x, v2.s.x));
|
||||
int minY = com_vec_min(com_vec_from(v0.s.y, v1.s.y, v2.s.y));
|
||||
int maxX = com_vec_max(com_vec_from(v0.s.x, v1.s.x, v2.s.x));
|
||||
int maxY = com_vec_max(com_vec_from(v0.s.y, v1.s.y, v2.s.y));
|
||||
int minX = com_vec_min(com_vec_from(v0.a[0], v1.a[0], v2.a[0]));
|
||||
int minY = com_vec_min(com_vec_from(v0.a[1], v1.a[1], v2.a[1]));
|
||||
int maxX = com_vec_max(com_vec_from(v0.a[0], v1.a[0], v2.a[0]));
|
||||
int maxY = com_vec_max(com_vec_from(v0.a[1], v1.a[1], v2.a[1]));
|
||||
|
||||
for (int y = minY; y <= maxY; y++) {
|
||||
for (int x = minX; x <= maxX; x++) {
|
||||
com_pnt_t p = {.s = {x, y}};
|
||||
com_pnt_t p = {.a = {x, y}};
|
||||
|
||||
// Test the pixel center against all 3 edges
|
||||
com_vec_t ws = com_pnt_edge_weight(v0, v1, v2, p);
|
||||
@@ -89,16 +89,16 @@ static inline void com_gem_draw_triangle_textured(com_pnt_t v0, com_pnt_t v1,
|
||||
com_pnt_t v2, uint8_t *out,
|
||||
com_pnt_t uv0, com_pnt_t uv1,
|
||||
com_pnt_t uv2, uint8_t *tex) {
|
||||
int minX = com_vec_min(com_vec_from(v0.s.x, v1.s.x, v2.s.x));
|
||||
int minY = com_vec_min(com_vec_from(v0.s.y, v1.s.y, v2.s.y));
|
||||
int maxX = com_vec_max(com_vec_from(v0.s.x, v1.s.x, v2.s.x));
|
||||
int maxY = com_vec_max(com_vec_from(v0.s.y, v1.s.y, v2.s.y));
|
||||
int minX = com_vec_min(com_vec_from(v0.a[0], v1.a[0], v2.a[0]));
|
||||
int minY = com_vec_min(com_vec_from(v0.a[1], v1.a[1], v2.a[1]));
|
||||
int maxX = com_vec_max(com_vec_from(v0.a[0], v1.a[0], v2.a[0]));
|
||||
int maxY = com_vec_max(com_vec_from(v0.a[1], v1.a[1], v2.a[1]));
|
||||
|
||||
com_fix_t const area = com_pnt_area(v0, v1, v2);
|
||||
|
||||
for (int y = minY; y <= maxY; y++) {
|
||||
for (int x = minX; x <= maxX; x++) {
|
||||
com_pnt_t p = {.s = {x, y}};
|
||||
com_pnt_t p = {.a = {x, y}};
|
||||
|
||||
/* TODO: Move to a separate weighting function over vec. */
|
||||
// Test the pixel center against all 3 edges
|
||||
|
||||
Reference in New Issue
Block a user