Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mandelbrot-explorer
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ильин Владимир Александрович
mandelbrot-explorer
Commits
44346766
Commit
44346766
authored
Feb 17, 2025
by
Ильин Владимир Александрович
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
A lot of stuff...
parent
38f28414
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
47 additions
and
31 deletions
+47
-31
Makefile
Makefile
+3
-2
mouse.o
build/mouse.o
+0
-0
ui.o
build/ui.o
+0
-0
mandelbrot
mandelbrot
+0
-0
mandelbrot.c
src/mandelbrot.c
+39
-25
mandelbrot.h
src/mandelbrot.h
+5
-4
No files found.
Makefile
View file @
44346766
CFLAGS
=
-Wno-unused-command-line-argument
-Wno-missing-field-initializers
-Wall
-Wextra
-Wpedantic
-lm
CFLAGS
=
-Wno-unused-command-line-argument
-Wno-missing-field-initializers
-Wall
-Wextra
-Wpedantic
-lm
-fopenmp
DEBUG_CFLAGS
=
-g
-DDEBUG
LDLIBS
=
$(
shell
pkg-config
--libs
sdl2 SDL2_ttf
)
...
...
@@ -9,7 +9,8 @@ CFLAGS := $(CFLAGS) $(DEBUG_CFLAGS)
SRCDIR
=
src
BIULDDIR
=
build
# compiler
CC
=
gcc
#CC = gcc
CC
=
clang
OBJS
=
$(BIULDDIR)
/mouse.o
$(BIULDDIR)
/ui.o
...
...
build/mouse.o
View file @
44346766
No preview for this file type
build/ui.o
View file @
44346766
No preview for this file type
mandelbrot
View file @
44346766
No preview for this file type
src/mandelbrot.c
View file @
44346766
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_scancode.h>
#include <SDL2/SDL_surface.h>
#include <SDL2/SDL_timer.h>
#include <SDL2/SDL_video.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <complex.h>
#include
<pthread
.h>
#include
<omp
.h>
#include "mandelbrot.h"
#include "mouse.h"
...
...
@@ -30,21 +31,22 @@ mandelbrot(Complex c) {
}
void
render
(
SDL_Renderer
*
renderer
,
ViewInfo
view
,
int
start_x
,
int
end_x
,
int
start_y
,
int
end_y
)
{
SDL_SetRenderDrawColor
(
renderer
,
0
,
0
,
50
,
255
);
SDL_RenderClear
(
renderer
);
render
(
App
*
app
,
ViewInfo
view
,
int
start_x
,
int
end_x
,
int
start_y
,
int
end_y
)
{
SDL_SetRenderDrawColor
(
app
->
renderer
,
0
,
0
,
50
,
255
);
SDL_RenderClear
(
app
->
renderer
);
//#pragma omp parallel for schedule(guided)
for
(
int
x
=
start_x
;
x
<
end_x
;
x
++
)
{
for
(
int
y
=
start_y
;
y
<
end_y
;
y
++
)
{
double
real
=
view
.
x_min
+
(
x
*
(
view
.
x_max
-
view
.
x_min
))
/
SCREEN_WIDTH
;
double
imag
=
view
.
y_min
+
(
y
*
(
view
.
y_max
-
view
.
y_min
))
/
SCREEN_HEIGHT
;
double
real
=
view
.
x_min
+
(
x
*
(
view
.
x_max
-
view
.
x_min
))
/
app
->
win_width
;
double
imag
=
view
.
y_min
+
(
y
*
(
view
.
y_max
-
view
.
y_min
))
/
app
->
win_height
;
Complex
c
=
{
real
,
imag
};
int
iterations
=
mandelbrot
(
c
);
if
(
iterations
==
MAX_ITERATIONS
){
SDL_SetRenderDrawColor
(
renderer
,
0
,
0
,
0
,
255
);
SDL_SetRenderDrawColor
(
app
->
renderer
,
0
,
0
,
0
,
255
);
}
else
{
double
t
=
(
double
)
iterations
/
MAX_ITERATIONS
;
t
=
0
.
5
+
0
.
5
*
cos
(
log
(
t
+
0
.
0001
)
*
3
.
0
);
...
...
@@ -53,9 +55,9 @@ render(SDL_Renderer* renderer, ViewInfo view, int start_x, int end_x, int start_
int
g
=
(
int
)(
255
*
t
*
0
.
4
);
int
b
=
(
int
)(
255
*
t
*
0
.
2
);
SDL_SetRenderDrawColor
(
renderer
,
r
,
g
,
b
,
255
);
SDL_SetRenderDrawColor
(
app
->
renderer
,
r
,
g
,
b
,
255
);
}
SDL_RenderDrawPoint
(
renderer
,
x
,
y
);
SDL_RenderDrawPoint
(
app
->
renderer
,
x
,
y
);
}
}
}
...
...
@@ -74,10 +76,12 @@ main(int argc, char *argv[])
SDL_CreateWindow
(
"Mandelbrot set exploer"
,
0
,
0
,
SCREEN_WIDTH
,
SCREEN_HEIGHT
,
SDL_WINDOW_SHOWN
),
SDL_WINDOW_SHOWN
|
SDL_WINDOW_RESIZABLE
|
SDL_WINDOW_OPENGL
),
SDL_CreateRenderer
(
app
.
window
,
-
1
,
SDL_RENDERER_ACCELERATED
)
SDL_RENDERER_ACCELERATED
),
SCREEN_HEIGHT
,
SCREEN_WIDTH
};
ViewInfo
view
=
{
...
...
@@ -95,10 +99,7 @@ main(int argc, char *argv[])
.
original_view
=
view
};
const
int
FPS
=
60
;
const
int
FRAME_DELAY
=
1000
/
FPS
;
Uint32
frame_start
;
int
frame_time
;
UI
ui
;
init_ui
(
&
ui
);
...
...
@@ -119,13 +120,32 @@ main(int argc, char *argv[])
case
SDL_QUIT
:
running
=
0
;
break
;
case
SDL_KEYDOWN
:
case
SDL_WINDOWEVENT
:
if
(
event
.
window
.
event
==
SDL_WINDOWEVENT_RESIZED
){
SDL_GetWindowSize
(
app
.
window
,
&
app
.
win_width
,
&
app
.
win_height
);
}
break
;
case
SDL_KEYDOWN
:
switch
(
event
.
key
.
keysym
.
scancode
)
{
case
SDL_SCANCODE_Q
:
case
SDL_SCANCODE_ESCAPE
:
running
=
0
;
break
;
case
SDL_SCANCODE_MINUS
:
view
.
x_min
=
view
.
x_min
*
1
.
1
;
view
.
x_max
=
view
.
x_max
*
1
.
1
;
view
.
y_min
=
view
.
y_min
*
1
.
1
;
view
.
y_max
=
view
.
y_max
*
1
.
1
;
view
.
zoom
=
view
.
zoom
*
1
.
1
;
break
;
case
SDL_SCANCODE_EQUALS
:
view
.
x_min
=
view
.
x_min
*
0
.
9
;
view
.
x_max
=
view
.
x_max
*
0
.
9
;
view
.
y_min
=
view
.
y_min
*
0
.
9
;
view
.
y_max
=
view
.
y_max
*
0
.
9
;
view
.
zoom
=
view
.
zoom
*
0
.
9
;
break
;
}
default:
handle_mouse
(
event
,
&
mouse
,
&
view
);
...
...
@@ -136,13 +156,10 @@ main(int argc, char *argv[])
SDL_RenderClear
(
app
.
renderer
);
//drawing happens here
pthread_t
threads
[
THREADS
];
int
thread
=
0
;
render
(
app
.
renderer
,
render
(
&
app
,
view
,
0
,
SCREEN_WIDTH
,
0
,
SCREEN_HEIGHT
);
0
,
app
.
win_width
,
0
,
app
.
win_height
);
int
msec
=
SDL_GetTicks
()
-
frame_start
;
float
fps
=
0
;
...
...
@@ -153,9 +170,6 @@ main(int argc, char *argv[])
SDL_RenderPresent
(
app
.
renderer
);
frame_time
=
SDL_GetTicks
()
-
frame_start
;
if
(
frame_time
<
FRAME_DELAY
)
SDL_Delay
(
FRAME_DELAY
-
frame_time
);
}
//SDL_FreeSurface(app.surfaceA);
SDL_DestroyRenderer
(
app
.
renderer
);
...
...
src/mandelbrot.h
View file @
44346766
...
...
@@ -5,8 +5,8 @@
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define MAX_ITERATIONS
3
00
#define
THREADS 4
#define MAX_ITERATIONS
2
00
#define
FRAMES_TO_CALCULATE_FPS 10
typedef
struct
{
double
real
;
...
...
@@ -16,6 +16,8 @@ typedef struct {
typedef
struct
{
SDL_Window
*
window
;
SDL_Renderer
*
renderer
;
int
win_height
;
int
win_width
;
}
App
;
typedef
struct
{
...
...
@@ -33,7 +35,6 @@ typedef struct{
ViewInfo
original_view
;
}
Mouse
;
void
render
(
SDL_Renderer
*
renderer
,
ViewInfo
view
,
int
start_x
,
int
end_x
,
int
start_y
,
int
end_y
);
void
render
(
App
*
app
,
ViewInfo
view
,
int
start_x
,
int
end_x
,
int
start_y
,
int
end_y
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment