Implement shaders #1
| @@ -26,7 +26,7 @@ enum { | ||||
|  | ||||
| internal M4x4f get_projection_matrix(ProjectionType projection_type); | ||||
| internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view, | ||||
|                                 M4x4f *projection, const Render *render); | ||||
|                                 M4x4f *projection, const Image *img); | ||||
|  | ||||
| int main(void) { | ||||
|   Arena *arena = NULL; | ||||
| @@ -82,12 +82,11 @@ internal M4x4f get_projection_matrix(ProjectionType projection_type) { | ||||
| } | ||||
|  | ||||
| internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view, | ||||
|                                 M4x4f *projection, const Render *render) { | ||||
|                                 M4x4f *projection, const Image *img) { | ||||
|   V4f vh = {.x = vertex->x, .y = vertex->y, .z = vertex->z, .w = 1.0f}; | ||||
|   vh = mat4x4_mul_vec4((*projection), mat4x4_mul_vec4((*model_view), vh)); | ||||
|   vh.y = 0.0 - vh.y; | ||||
|   vh = mat4x4_mul_vec4( | ||||
|       viewport(vh.x, vh.y, render->img.width, render->img.height), vh); | ||||
|   vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh); | ||||
|  | ||||
|   return project_vec4(vh); | ||||
| } | ||||
|   | ||||
| @@ -162,7 +162,7 @@ internal void render_triangle(const Triangle *triangle, const Model *model, | ||||
|  | ||||
|   for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) { | ||||
|     vertices[i] = shader->vertex(&vertices[i], shader->model_view, | ||||
|                                  shader->projection, render); | ||||
|                                  shader->projection, &render->img); | ||||
|   } | ||||
|  | ||||
|   if (render_type == RENDER_TYPE_WIREFRAME) { | ||||
|   | ||||
							
								
								
									
										14
									
								
								src/obj.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/obj.h
									
									
									
									
									
								
							| @@ -4,8 +4,8 @@ | ||||
| #include "aliases.h" | ||||
| #include "img.h" | ||||
| #include "mem_arena.h" | ||||
| #include "shader.h" | ||||
| #include "typed_list.h" | ||||
| #include "vec.h" | ||||
|  | ||||
| #define INVALID_MODEL ((Model){0}) | ||||
| #define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL) | ||||
| @@ -55,18 +55,6 @@ struct render { | ||||
|   Depth depth; | ||||
| }; | ||||
|  | ||||
| typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view, | ||||
|                           M4x4f *projection, const Render *render); | ||||
| typedef bool(FragmentShader)(Colour colour); | ||||
|  | ||||
| typedef struct shader Shader; | ||||
| struct shader { | ||||
|   VertexShader *vertex; | ||||
|   FragmentShader *fragment; | ||||
|   M4x4f *model_view; | ||||
|   M4x4f *projection; | ||||
| }; | ||||
|  | ||||
| Model load_obj_file(Arena *arena, const char *filename, const char *texture); | ||||
| bool init_render(Arena *arena, Render *render, u64 width, u64 height); | ||||
| void render_model(const Model *model, Render *render, const Shader *shader, | ||||
|   | ||||
							
								
								
									
										19
									
								
								src/shader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/shader.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| #ifndef SHADER_H | ||||
| #define SHADER_H | ||||
|  | ||||
| #include "img.h" | ||||
| #include "vec.h" | ||||
|  | ||||
| typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view, | ||||
|                           M4x4f *projection, const Image *img); | ||||
| typedef bool(FragmentShader)(Colour colour); | ||||
|  | ||||
| typedef struct shader Shader; | ||||
| struct shader { | ||||
|   VertexShader *vertex; | ||||
|   FragmentShader *fragment; | ||||
|   M4x4f *model_view; | ||||
|   M4x4f *projection; | ||||
| }; | ||||
|  | ||||
| #endif // SHADER_H | ||||
		Reference in New Issue
	
	Block a user