MLX42 1.0
MLX42
Loading...
Searching...
No Matches
mlx_init.c File Reference
#include "MLX42/MLX42_Int.h"
Include dependency graph for mlx_init.c:

Go to the source code of this file.

Functions

static void framebuffer_callback (GLFWwindow *window, int width, int height)
 
static bool mlx_create_buffers (mlx_t *mlx)
 
static uint32_t mlx_compile_shader (const char *code, int32_t type)
 
static bool mlx_init_render (mlx_t *mlx)
 
mlx_tmlx_init (int32_t width, int32_t height, const char *title, bool resize)
 
void mlx_set_setting (mlx_settings_t setting, int32_t value)
 

Variables

int32_t mlx_settings [MLX_SETTINGS_MAX] = {false, false, false, true, false}
 
mlx_errno_t mlx_errno = MLX_SUCCESS
 
bool sort_queue = false
 

Function Documentation

◆ framebuffer_callback()

static void framebuffer_callback ( GLFWwindow window,
int  width,
int  height 
)
static

Definition at line 17 of file mlx_init.c.

18{
19 (void)window;
20 glViewport(0, 0, width, height);
21}
GLint GLsizei GLsizei height
Definition glad.h:1965
GLint GLsizei width
Definition glad.h:1965
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
#define glViewport
Definition glad.h:2090
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mlx_compile_shader()

static uint32_t mlx_compile_shader ( const char code,
int32_t  type 
)
static

Compiles the given shader source code of a given shader type. Returns shader object via param.

Parameters
codeThe shader source code.
TypeGL_VERTEX_SHADER, GL_FRAGMENT_SHADER, GL_GEOMETRY_SHADER, ...
Returns
Non-zero on success, else 0.

Definition at line 78 of file mlx_init.c.

79{
82 char infolog[512] = {0};
83
84 if (!code || (shader = glCreateShader(type)) == 0)
85 return (0);
86
91 if (!success)
92 {
94 fprintf(stderr, "%s", infolog);
96 return (0);
97 }
98 return (shader);
99}
#define glGetShaderInfoLog
Definition glad.h:3395
#define glShaderSource
Definition glad.h:3431
#define glCreateShader
Definition glad.h:3356
GLuint shader
Definition glad.h:3342
unsigned int GLuint
Definition glad.h:99
GLint GLint GLsizei GLint GLenum GLenum type
Definition glad.h:1980
#define GL_COMPILE_STATUS
Definition glad.h:962
GLuint GLsizei GLsizei * length
Definition glad.h:3372
#define glDeleteShader
Definition glad.h:3362
int GLint
Definition glad.h:98
#define glCompileShader
Definition glad.h:3350
#define glGetShaderiv
Definition glad.h:3392
Here is the caller graph for this function:

◆ mlx_create_buffers()

static bool mlx_create_buffers ( mlx_t mlx)
static

Definition at line 23 of file mlx_init.c.

24{
26
27 mlxctx->zdepth = 0;
29 glGenVertexArrays(1, &(mlxctx->vao));
30 glGenBuffers(1, &(mlxctx->vbo));
33
34 // Vertex XYZ coordinates
37
38 // UV Coordinates
39 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (void *)(sizeof(float) * 3));
41
42 // Texture index
43 glVertexAttribIPointer(2, 1, GL_BYTE, sizeof(vertex_t), (void *)(sizeof(float) * 5));
45
49
50 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture0"), 0);
51 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture1"), 1);
52 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture2"), 2);
53 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture3"), 3);
54 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture4"), 4);
55 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture5"), 5);
56 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture6"), 6);
57 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture7"), 7);
58 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture8"), 8);
59 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture9"), 9);
60 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture10"), 10);
61 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture11"), 11);
62 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture12"), 12);
63 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture13"), 13);
64 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture14"), 14);
65 glUniform1i(glGetUniformLocation(mlxctx->shaderprogram, "Texture15"), 15);
66
67 return (true);
68}
#define glGetUniformLocation
Definition glad.h:3401
#define GL_TEXTURE0
Definition glad.h:705
#define glGenBuffers
Definition glad.h:3298
#define glBindBuffer
Definition glad.h:3292
#define glEnable
Definition glad.h:2015
#define glBindVertexArray
Definition glad.h:3874
#define glVertexAttribIPointer
Definition glad.h:3679
#define GL_DEPTH_TEST
Definition glad.h:198
#define GL_SRC_ALPHA
Definition glad.h:161
#define GL_BYTE
Definition glad.h:250
#define GL_FLOAT
Definition glad.h:256
#define glEnableVertexAttribArray
Definition glad.h:3371
#define GL_ARRAY_BUFFER
Definition glad.h:857
#define glGenVertexArrays
Definition glad.h:3880
#define glVertexAttribPointer
Definition glad.h:3605
#define GL_BLEND
Definition glad.h:215
#define GL_ONE_MINUS_SRC_ALPHA
Definition glad.h:162
#define GL_FALSE
Definition glad.h:139
#define glUniform1i
Definition glad.h:3449
#define glActiveTexture
Definition glad.h:2981
#define glBlendFunc
Definition glad.h:2024
Definition MLX42.h:361
void * context
Definition MLX42.h:363
Here is the caller graph for this function:

◆ mlx_init()

mlx_t * mlx_init ( int32_t  width,
int32_t  height,
const char title,
bool  resize 
)

Initializes a new MLX42 Instance.

Parameters
[in]widthThe width of the window.
[in]heightThe height of the window.
[in]titleThe title of the window.
[in]resizeEnable window resizing.
Returns
Ptr to the MLX handle or null on failure.

Definition at line 164 of file mlx_init.c.

165{
167 MLX_ASSERT(width > 0, "Window width must be positive");
168 MLX_ASSERT(height > 0, "Window height must be positive");
169
170 bool init;
171 mlx_t* mlx;
172 if (!(init = glfwInit()))
173 return ((void*)mlx_error(MLX_GLFWFAIL));
174 if (!(mlx = calloc(1, sizeof(mlx_t))))
175 return ((void*)mlx_error(MLX_MEMFAIL));
176 if (!(mlx->context = calloc(1, sizeof(mlx_ctx_t))))
177 return (free(mlx), (void*)mlx_error(MLX_MEMFAIL));
178
179 mlx_ctx_t* const mlxctx = mlx->context;
180 mlx->window = NULL;
181 mlx->width = width;
182 mlx->height = height;
183 mlxctx->initialWidth = width;
184 mlxctx->initialHeight = height;
185
186 // NOTE(W2): For emscripten, this value will be ignored anyway.
188#ifdef EMSCRIPTEN
194#else
200#endif
201#ifdef __APPLE__
203#endif
208 return (mlx_terminate(mlx), NULL);
210 return (mlx);
211}
mlx_settings
Definition MLX42.h:398
@ MLX_DECORATED
Definition MLX42.h:402
@ MLX_MAXIMIZED
Definition MLX42.h:401
@ MLX_HEADLESS
Definition MLX42.h:403
@ MLX_FULLSCREEN
Definition MLX42.h:400
@ MLX_MEMFAIL
Definition MLX42.h:383
@ MLX_WINFAIL
Definition MLX42.h:386
@ MLX_GLFWFAIL
Definition MLX42.h:385
void mlx_terminate(mlx_t *mlx)
Definition mlx_exit.c:36
#define MLX_NONNULL(var)
Definition MLX42_Int.h:46
bool mlx_error(mlx_errno_t val)
Definition mlx_error.c:43
#define MLX_ASSERT(cond, msg)
Definition MLX42_Int.h:45
#define GL_TRUE
Definition glad.h:140
static bool mlx_create_buffers(mlx_t *mlx)
Definition mlx_init.c:23
static bool mlx_init_render(mlx_t *mlx)
Definition mlx_init.c:101
int32_t width
Definition MLX42.h:364
int32_t height
Definition MLX42.h:365
void * window
Definition MLX42.h:362
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mlx_init_render()

static bool mlx_init_render ( mlx_t mlx)
static

Definition at line 101 of file mlx_init.c.

102{
103 uint32_t vshader = 0;
104 uint32_t fshader = 0;
105 char infolog[512] = {0};
107
112
113 // Load all OpenGL function pointers
115 return (mlx_error(MLX_GLADFAIL));
117 return (mlx_error(MLX_VERTFAIL));
119 return (mlx_error(MLX_FRAGFAIL));;
120 if (!(mlxctx->shaderprogram = glCreateProgram()))
121 {
124 return (mlx_error(MLX_SHDRFAIL));
125 }
126 glAttachShader(mlxctx->shaderprogram, vshader);
127 glAttachShader(mlxctx->shaderprogram, fshader);
128 glLinkProgram(mlxctx->shaderprogram);
129
131 glGetProgramiv(mlxctx->shaderprogram, GL_LINK_STATUS, &success);
132 if (!success)
133 {
134 glGetProgramInfoLog(mlxctx->shaderprogram, sizeof(infolog), NULL, infolog);
135 fprintf(stderr, "%s", infolog);
136 glDeleteProgram(mlxctx->shaderprogram);
139 return (mlx_error(MLX_SHDRFAIL));
140 }
141
142 // Detach shaders after linking but before deleting them
143 glDetachShader(mlxctx->shaderprogram, vshader);
144 glDetachShader(mlxctx->shaderprogram, fshader);
145
146 // Delete shaders
149 glUseProgram(mlxctx->shaderprogram);
150 for (size_t i = 0; i < 16; i++)
151 mlxctx->bound_textures[i] = 0;
152 return (true);
153}
@ MLX_FRAGFAIL
Definition MLX42.h:381
@ MLX_SHDRFAIL
Definition MLX42.h:382
@ MLX_VERTFAIL
Definition MLX42.h:380
@ MLX_GLADFAIL
Definition MLX42.h:384
const char * vert_shader
const char * frag_shader
#define MLX_SWAP_INTERVAL
Definition MLX42_Int.h:37
#define glAttachShader
Definition glad.h:3344
#define GL_FRAGMENT_SHADER
Definition glad.h:934
GLAPI int gladLoadGLLoader(GLADloadproc)
Definition glad.c:2503
#define glGetProgramiv
Definition glad.h:3386
#define glDeleteProgram
Definition glad.h:3359
void *(* GLADloadproc)(const char *name)
Definition glad.h:55
#define GL_VERTEX_SHADER
Definition glad.h:935
#define glCreateProgram
Definition glad.h:3353
#define glGetProgramInfoLog
Definition glad.h:3389
#define glLinkProgram
Definition glad.h:3428
#define glUseProgram
Definition glad.h:3434
#define GL_LINK_STATUS
Definition glad.h:963
#define glDetachShader
Definition glad.h:3365
static void framebuffer_callback(GLFWwindow *window, int width, int height)
Definition mlx_init.c:17
static uint32_t mlx_compile_shader(const char *code, int32_t type)
Definition mlx_init.c:78
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mlx_set_setting()

void mlx_set_setting ( mlx_settings_t  setting,
int32_t  value 
)

Set a setting for MLX42. Settings can manipulate the core behaviour of the engine.

Parameters
[in]settingThe settings value, See mlx_settings_t type.
[in]valueSettings value to determine the state of the setting. Can be a boolean or an enum / macro.

Definition at line 213 of file mlx_init.c.

214{
215 MLX_ASSERT(setting >= 0 && setting < MLX_SETTINGS_MAX, "Invalid settings value");
217}
@ MLX_SETTINGS_MAX
Definition MLX42.h:404
GLfloat value
Definition glad.h:2667
Here is the caller graph for this function:

Variable Documentation

◆ mlx_errno

Definition at line 161 of file mlx_init.c.

◆ mlx_settings

Definition at line 160 of file mlx_init.c.

160{false, false, false, true, false};

◆ sort_queue

bool sort_queue = false

Definition at line 162 of file mlx_init.c.