summaryrefslogtreecommitdiff
path: root/prge_draw.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-03-27 08:27:46 +0500
committerpryazha <pryadeiniv@mail.ru>2025-03-27 08:27:46 +0500
commit92a8eb610f40c9770569ca63ca1bd705a6d3497d (patch)
tree7cb8edbf29e51aea24bc55be066b55033fe8fa1d /prge_draw.c
parentb1389bad67cccd3da6815c2d5a436c177f09594b (diff)
audio, renaming
Diffstat (limited to 'prge_draw.c')
-rw-r--r--prge_draw.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/prge_draw.c b/prge_draw.c
new file mode 100644
index 0000000..4228d68
--- /dev/null
+++ b/prge_draw.c
@@ -0,0 +1,78 @@
+void clear_window(PRGEWindow wnd, V3 clear_color)
+{
+ glClearColor(clear_color.x, clear_color.y, clear_color.z, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+}
+
+void begin3d(PRGEWindow wnd, Shader shader, Camera camera)
+{
+ F32 ar;
+ MAT4 proj, view;
+
+ ar = (F32)wnd.w/(F32)wnd.h;
+ proj = camera_persp(camera, ar);
+ view = getfpviewmat(&camera);
+
+ glUseProgram(shader.id);
+
+ setmat4fv(shader.id, PRGE_SHADER_PROJ_MAT, proj);
+ setmat4fv(shader.id, PRGE_SHADER_VIEW_MAT, view);
+}
+
+void end3d(void)
+{
+ glUseProgram(0);
+}
+
+void begin3d_alpha(PRGEWindow wnd, Shader shader, Camera camera)
+{
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ begin3d(wnd, shader, camera);
+}
+
+void end3d_alpha(void)
+{
+ end3d();
+ glDisable(GL_BLEND);
+}
+
+void draw_mesh(Mesh mesh)
+{
+ S32 i;
+
+ ASSERT(mesh.vao);
+
+ glBindVertexArray(mesh.vao);
+
+ for (i = 0; i < mesh.ntextures; i++) {
+ glActiveTexture(GL_TEXTURE0+i);
+ glBindTexture(GL_TEXTURE_2D, mesh.textures[i].id);
+ }
+
+ if (mesh.ebo)
+ glDrawElements(GL_TRIANGLES, mesh.nindices, GL_UNSIGNED_INT, 0);
+ else
+ glDrawArrays(GL_TRIANGLES, 0, mesh.nverts);
+
+ glBindVertexArray(0);
+}
+
+void draw_model(Shader shader, Model model)
+{
+ MAT4 modelm,
+ meshm,
+ resm;
+ S32 i;
+
+ modelm = rotatemat4(MAT4_IDENTITY, model.rotate);
+ modelm = translmat4(modelm, model.origin);
+ for (i = 0; i < model.nmeshes; i++) {
+ meshm = rotatemat4(MAT4_IDENTITY, model.meshes[i].rotate);
+ meshm = translmat4(meshm, model.meshes[i].origin);
+ resm = mulmat4(modelm, meshm);
+
+ setmat4fv(shader.id, PRGE_SHADER_MODEL_MAT, resm);
+ draw_mesh(model.meshes[i]);
+ }
+}