36 #ifndef __JO_SOFTWARE_RENDERER_H__
37 # define __JO_SOFTWARE_RENDERER_H__
39 #ifdef JO_COMPILE_WITH_SOFTWARE_RENDERER_SUPPORT
66 JO_SR_DRAW_TEXTURED = (1 << 0),
67 JO_SR_DRAW_FLAT = (1 << 1),
68 JO_SR_DRAW_WIREFRAME = (1 << 2)
69 } jo_software_renderer_draw_mode;
74 JO_SR_BACK_FACE_CULLING = (1 << 0),
75 JO_SR_FRONT_FACE_CULLING = (1 << 1),
76 JO_SR_NO_FACE_CULLING = (1 << 2)
77 } jo_software_renderer_face_culling_mode;
82 JO_SR_DEPTH_IGNORE = (1 << 0),
83 JO_SR_DEPTH_LESS = (1 << 1),
84 JO_SR_DEPTH_LESS_OR_EQUAL = (1 << 2),
85 JO_SR_DEPTH_GREATER_OR_EQUAL = (1 << 3),
86 JO_SR_DEPTH_GREATER = (1 << 4),
87 JO_SR_DEPTH_NOT_EQUAL = (1 << 5),
88 JO_SR_DEPTH_EQUAL = (1 << 6)
89 } jo_software_renderer_depth_mode;
97 unsigned int depth_buffer_dword_size;
99 unsigned int color_buffer_size;
102 jo_software_renderer_depth_mode depth_mode_testing;
103 jo_software_renderer_draw_mode draw_mode;
104 jo_software_renderer_face_culling_mode face_culling_mode;
105 } jo_software_renderer_gfx;
113 } jo_software_renderer_vertex;
121 jo_software_renderer_gfx *jo_software_renderer_create(
unsigned short width,
unsigned short height,
const jo_scroll_screen screen);
127 void jo_software_renderer_free(jo_software_renderer_gfx *
const gfx);
132 void jo_software_renderer_flush(jo_software_renderer_gfx *
const gfx);
147 void jo_software_renderer_clear(
const jo_software_renderer_gfx *
const gfx,
const jo_color color);
155 void jo_software_renderer_draw_pixel2D(
const jo_software_renderer_gfx *
const gfx,
const jo_fixed x,
const jo_fixed y,
const jo_color color);
164 void jo_software_renderer_draw_pixel3D(
const jo_software_renderer_gfx *
const gfx,
const jo_fixed x,
const jo_fixed y,
const jo_fixed z,
const jo_color color);
177 void jo_software_renderer_draw_line3D(
const jo_software_renderer_gfx *
const gfx,
194 jo_software_renderer_vertex v0;
195 jo_software_renderer_vertex v1;
196 jo_software_renderer_vertex v2;
198 } jo_software_renderer_triangle;
200 void jo_software_renderer_draw_triangle(
const jo_software_renderer_gfx *
const gfx,
201 const jo_software_renderer_triangle *
const triangle,
202 const jo_matrix *
const transform_matrix);
208 static __jo_force_inline void jo_software_renderer_draw_triangle_wireframe(
const jo_software_renderer_gfx *
const gfx,
const jo_software_renderer_triangle *
const triangle)
210 jo_software_renderer_draw_line3D(gfx,
211 triangle->v0.pos.x, triangle->v0.pos.y, triangle->v0.pos.z,
212 triangle->v1.pos.x, triangle->v1.pos.y, triangle->v1.pos.z,
213 triangle->v0.color, triangle->v1.color);
214 jo_software_renderer_draw_line3D(gfx,
215 triangle->v1.pos.x, triangle->v1.pos.y, triangle->v1.pos.z,
216 triangle->v2.pos.x, triangle->v2.pos.y, triangle->v2.pos.z,
217 triangle->v1.color, triangle->v2.color);
218 jo_software_renderer_draw_line3D(gfx,
219 triangle->v2.pos.x, triangle->v2.pos.y, triangle->v2.pos.z,
220 triangle->v0.pos.x, triangle->v0.pos.y, triangle->v0.pos.z,
221 triangle->v2.color, triangle->v0.color);
224 #endif // JO_COMPILE_WITH_SOFTWARE_RENDERER_SUPPORT