From c40ac84075ac3fa1310201d8b705f87b0e4a0c7a Mon Sep 17 00:00:00 2001 From: James Whiteman Date: Mon, 7 Feb 2022 18:47:20 -0800 Subject: [PATCH] Separate X11 and OpenGL and binding calls --- command/linux/rebuild.sh | 14 ++++-- compile/code/macros.h | 2 + compile/draw/opengl_service.cpp | 1 + compile/draw/opengl_service.h | 14 ++---- compile/draw/window_service.h | 5 +- compile/fabricate/face.cpp | 12 +++++ compile/fabricate/face.h | 15 ++++++ compile/fabricate/model.cpp | 0 compile/fabricate/model.h | 13 +++++ compile/fabricate/model_service.cpp | 48 +++++++++++++++++++ compile/fabricate/model_service.h | 37 ++++++++++++++ compile/fabricate/texture_coordinate.cpp | 9 ++++ compile/fabricate/texture_coordinate.h | 12 +++++ compile/fabricate/vector.cpp | 11 +++++ compile/fabricate/vector.h | 14 ++++++ compile/fabricate/vertex.cpp | 11 +++++ compile/fabricate/vertex.h | 14 ++++++ compile/main.cpp | 47 ++++++++++++++++++ .../target/linux/draw/opengl_x11_service.cpp | 9 ---- .../target/linux/draw/opengl_x11_service.h | 13 ++--- compile/target/linux/draw/window_service.cpp | 10 ---- .../project_files.txt => pack/cpp_files.txt | 0 {compile => pack}/libraries.txt | 0 pack/obj_files.txt | 1 + 24 files changed, 266 insertions(+), 46 deletions(-) create mode 100644 compile/code/macros.h create mode 100644 compile/fabricate/face.cpp create mode 100644 compile/fabricate/face.h create mode 100644 compile/fabricate/model.cpp create mode 100644 compile/fabricate/model.h create mode 100644 compile/fabricate/model_service.cpp create mode 100644 compile/fabricate/model_service.h create mode 100644 compile/fabricate/texture_coordinate.cpp create mode 100644 compile/fabricate/texture_coordinate.h create mode 100644 compile/fabricate/vector.cpp create mode 100644 compile/fabricate/vector.h create mode 100644 compile/fabricate/vertex.cpp create mode 100644 compile/fabricate/vertex.h rename compile/project_files.txt => pack/cpp_files.txt (100%) rename {compile => pack}/libraries.txt (100%) create mode 100644 pack/obj_files.txt diff --git a/command/linux/rebuild.sh b/command/linux/rebuild.sh index 2f78ec6..9a66f5b 100755 --- a/command/linux/rebuild.sh +++ b/command/linux/rebuild.sh @@ -3,9 +3,11 @@ F_ROOT=$(readlink -f "$0") D_ROOT=$(dirname "${F_ROOT}")/../../. D_COMPILE=${D_ROOT}/compile D_LINK=${D_ROOT}/link +D_PACK=${D_ROOT}/pack D_RUN=${D_ROOT}/run -F_COMPILE_LIST=${D_COMPILE}/project_files.txt -F_LINK_LIST=${D_LINK}/project_files.txt +F_COMPILE_LIST=${D_PACK}/cpp_files.txt +F_LINK_LIST=${D_LINK}/object_files.txt +F_OBJ_LIST=${D_PACK}/obj_files.txt echo "" > ${F_LINK_LIST} # Compile. @@ -21,12 +23,16 @@ do I_COMPILE=${D_COMPILE}/${F_COMPILE} O_COMPILE=${D_LINK}/${F_COMPILE}.o mkdir -p "${O_COMPILE%/*}" - clang++ -I ${D_COMPILE} -c ${I_COMPILE} -o ${O_COMPILE} + + clang++ -I ${D_COMPILE} \ + -D ROOT_DIRECTORY_MV=\"${D_ROOT}\" \ + -c ${I_COMPILE} -o ${O_COMPILE} + echo ${O_COMPILE} >> ${F_LINK_LIST} done # Libraries. -F_LIBRARY_LIST=${D_COMPILE}/libraries.txt +F_LIBRARY_LIST=${D_PACK}/libraries.txt F_LIBRARY_OPTIONS=${D_LINK}/library_options.txt echo "" > ${F_LIBRARY_OPTIONS} LINE=0 diff --git a/compile/code/macros.h b/compile/code/macros.h new file mode 100644 index 0000000..ab0d11a --- /dev/null +++ b/compile/code/macros.h @@ -0,0 +1,2 @@ +#define STRINGIFY_MF(s) QUOTE_MF(s) +#define QUOTE_MF(s) #s diff --git a/compile/draw/opengl_service.cpp b/compile/draw/opengl_service.cpp index cbbc6ad..e4cdb25 100644 --- a/compile/draw/opengl_service.cpp +++ b/compile/draw/opengl_service.cpp @@ -1,6 +1,7 @@ #include "allocate/factory.h" #include "code/return.h" #include "draw/opengl_service.h" +#include opengl_service_t::opengl_service_t( opengl_service_t::configuration_t* configuration_p diff --git a/compile/draw/opengl_service.h b/compile/draw/opengl_service.h index 81ffbaf..5f62276 100644 --- a/compile/draw/opengl_service.h +++ b/compile/draw/opengl_service.h @@ -1,16 +1,8 @@ -#ifndef SERVICE_RENDER -#define SERVICE_RENDER +#ifndef DRAW_OPENGL_SERVICE +#define DRAW_OPENGL_SERVICE #include "allocate/factory.h" #include "code/return.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include + class opengl_service_t { friend class opengl_service_factory_t; public: diff --git a/compile/draw/window_service.h b/compile/draw/window_service.h index 72d0145..fc18f2d 100644 --- a/compile/draw/window_service.h +++ b/compile/draw/window_service.h @@ -1,9 +1,10 @@ -#ifndef SERVICE_WINDOW -#define SERVICE_WINDOW +#ifndef DRAW_WINDOW_SERVICE +#define DRAW_WINDOW_SERVICE #include "allocate/factory.h" #include "code/return.h" #include "inform/text_service.h" #include + class window_service_t { friend class window_service_factory_t; public: diff --git a/compile/fabricate/face.cpp b/compile/fabricate/face.cpp new file mode 100644 index 0000000..cee755e --- /dev/null +++ b/compile/fabricate/face.cpp @@ -0,0 +1,12 @@ +#include "fabricate/face.h" +#include "fabricate/vertex.h" + +face_t::face_t( + vertex_t vertex_a_p, + vertex_t vertex_b_p, + vertex_t vertex_c_p +) { + vertex_a = vertex_a_p; + vertex_b = vertex_b_p; + vertex_c = vertex_c_p; +} diff --git a/compile/fabricate/face.h b/compile/fabricate/face.h new file mode 100644 index 0000000..e103e9b --- /dev/null +++ b/compile/fabricate/face.h @@ -0,0 +1,15 @@ +#ifndef FABRICATE_FACE +#define FABRICATE_FACE +#include "fabricate/vertex.h" +class face_t { + public: + vertex_t vertex_a; + vertex_t vertex_b; + vertex_t vertex_c; + face_t( + vertex_t vertex_a_p, + vertex_t vertex_b_p, + vertex_t vertex_c_p + ); +}; +#endif diff --git a/compile/fabricate/model.cpp b/compile/fabricate/model.cpp new file mode 100644 index 0000000..e69de29 diff --git a/compile/fabricate/model.h b/compile/fabricate/model.h new file mode 100644 index 0000000..9aed39e --- /dev/null +++ b/compile/fabricate/model.h @@ -0,0 +1,13 @@ +#ifndef FABRICATE_MODEL +#define FABRICATE_MODEL +#include +class model_t { + public: + std::vector vertex_indices_m; + std::vector texture_coordinate_indices_m; + std::vector normal_indices_m; + std::vector vertices_m; + std::vector texture_coordinates_m; + std::vector normals_m; +}; +#endif diff --git a/compile/fabricate/model_service.cpp b/compile/fabricate/model_service.cpp new file mode 100644 index 0000000..196ea13 --- /dev/null +++ b/compile/fabricate/model_service.cpp @@ -0,0 +1,48 @@ +#include "fabricate/model_service.h" +#include "code/return.h" +#include + +model_service_t::model_service_t( + model_service_t::configuration_t* configuration_p +) { + configuration_m = configuration_p; +} + +return_t get_model_by_id( + model_service_t::model_id_t model_id_p +) { + model_t* model_l; + switch (model_id_p) { + case model_service_t::model_id_t::monkey: + // model_l = new model with correct data + break; + default: + model_l = nullptr; + break; + } + return_t return_l; + return_l.error_m = model_service_t::error_t::none; + return_l.value_m = model_l; + return return_l; +} + +return_t create( + model_service_t::configuration_t* configuration_p +) { + model_service_t* model_service_l = new model_service_t( + configuration_p + ); + return_t return_l; + return_l.error_m = model_service_t::error_t::none; + return_l.value_m = model_service_l; + return return_l; +} + +void_t dispose( + model_service_t* model_service_p +) { + delete model_service_p; + void_t void_l; + void_l.error_m = model_service_t::error_t::none; + return void_l; +} diff --git a/compile/fabricate/model_service.h b/compile/fabricate/model_service.h new file mode 100644 index 0000000..e6a4d14 --- /dev/null +++ b/compile/fabricate/model_service.h @@ -0,0 +1,37 @@ +#ifndef FABRICATE_MODEL_PARSER +#define FABRICATE_MODEL_PARSER +#include "allocate/factory.h" +#include "code/return.h" +#include +class model_service_t { + friend class model_service_factory_t; + public: + enum error_t { + none, + unknown + }; + enum model_id_t { + monkey + }; + struct configuration_t { + std::string obj_files_m; + }; + return_t get_model_by_id( + model_id_t model_id_p + ); + private: + model_service_t( + configuration_t* configuration_p + ); + configuration_t* configuration_m; +}; +class model_service_factory_t : public factory_t { + public: + return_t create( + model_service_t::configuration_t* configuration_p + ); + void_t dispose( + model_service_t* model_service_p + ); +}; +#endif diff --git a/compile/fabricate/texture_coordinate.cpp b/compile/fabricate/texture_coordinate.cpp new file mode 100644 index 0000000..bebc7a1 --- /dev/null +++ b/compile/fabricate/texture_coordinate.cpp @@ -0,0 +1,9 @@ +#include "fabricate/texture_coordinate.h" + +texture_coordinate_t( + float u_p, + float v_p +) { + u = u_p; + v = v_p; +} diff --git a/compile/fabricate/texture_coordinate.h b/compile/fabricate/texture_coordinate.h new file mode 100644 index 0000000..b38cb27 --- /dev/null +++ b/compile/fabricate/texture_coordinate.h @@ -0,0 +1,12 @@ +#ifndef FABRICATE_TEXTURE_COORDINATE +#define FABRICATE_TEXTURE_COORDINATE +class texture_coordinate_t { + public: + float u; + float v; + texture_coordinate_t( + float u_p, + float v_p + ); +}; +#endif diff --git a/compile/fabricate/vector.cpp b/compile/fabricate/vector.cpp new file mode 100644 index 0000000..5dbab0c --- /dev/null +++ b/compile/fabricate/vector.cpp @@ -0,0 +1,11 @@ +#include "fabricate/vector.h" + +vector_t::vector_t( + float x_p, + float y_p, + float z_p +) { + x = x_p; + y = y_p; + z = z_p; +} diff --git a/compile/fabricate/vector.h b/compile/fabricate/vector.h new file mode 100644 index 0000000..71d2069 --- /dev/null +++ b/compile/fabricate/vector.h @@ -0,0 +1,14 @@ +#ifndef FABRICATE_VECTOR +#define FABRICATE_VECTOR +class vector_t { + public: + float x; + float y; + float z; + vector_t( + float x_p, + float y_p, + float z_p + ); +}; +#endif diff --git a/compile/fabricate/vertex.cpp b/compile/fabricate/vertex.cpp new file mode 100644 index 0000000..52450e5 --- /dev/null +++ b/compile/fabricate/vertex.cpp @@ -0,0 +1,11 @@ +#include "fabricate/vertex.h" + +vertex_t::vertex_t( + float x_p, + float y_p, + float z_p +) { + x = x_p; + y = y_p; + z = z_p; +} diff --git a/compile/fabricate/vertex.h b/compile/fabricate/vertex.h new file mode 100644 index 0000000..6be42d4 --- /dev/null +++ b/compile/fabricate/vertex.h @@ -0,0 +1,14 @@ +#ifndef FABRICATE_VERTEX +#define FABRICATE_VERTEX +class vertex_t { + public: + float x; + float y; + float z; + vertex_t( + float x_p, + float y_p, + float z_p + ); +} +#endif diff --git a/compile/main.cpp b/compile/main.cpp index d09f92c..74c42ec 100644 --- a/compile/main.cpp +++ b/compile/main.cpp @@ -1,8 +1,55 @@ #include "act/controller.h" #include "act/root.h" #include "code/provider.h" +#include "code/macros.h" #include +#include +#include +#include +#include + int main(int argc, char *argv[]) { + // Parse configuration files. + std::string obj_list_filepath_l = ROOT_DIRECTORY_MV "/pack/obj_files.txt"; + FILE* obj_list_file_l = fopen(obj_list_filepath_l.data(), "r"); + char char_l = fgetc(obj_list_file_l); + std::string obj_file_l = ""; + std::vector obj_files_l; + while (char_l != EOF) { + if (char_l == '\n') { + std::string copy_l(obj_file_l); + obj_files_l.push_back(copy_l); + obj_file_l.clear(); + } else { + obj_file_l += char_l; + } + char_l = fgetc(obj_list_file_l); + } + + // Read OBJ files. + for (int i = 0; i < obj_files_l.size(); i++) { + obj_file_l = obj_files_l[i]; + std::string line_l; + std::ifstream file_l; + file_l.open(obj_file_l); + while (getline(file_l, line_l)) { + char first_l = line_l[0]; + char second_l = line_l[1]; + printf("%c\n", first_l); + if (first_l == 'v' && second_l != ' ') { + // Create vertex + } else if (first_l == 'v' && second_l == 'n') { + // Create vertex normal vector + } else if (first_l == 'v' && second_l == 't') { + // Create texture coordinate + } else if (first_l == 'f') { + // Create face + } else { + continue; + } + } + } + // Create text service. text_service_factory_t text_service_factory_l; text_service_t::configuration_t text_service_configuration_l; diff --git a/compile/target/linux/draw/opengl_x11_service.cpp b/compile/target/linux/draw/opengl_x11_service.cpp index ccb1f81..d290af5 100644 --- a/compile/target/linux/draw/opengl_x11_service.cpp +++ b/compile/target/linux/draw/opengl_x11_service.cpp @@ -1,15 +1,6 @@ #include "allocate/factory.h" #include "code/return.h" #include "target/linux/draw/opengl_x11_service.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include opengl_x11_service_t::opengl_x11_service_t( opengl_x11_service_t::configuration_t* configuration_p diff --git a/compile/target/linux/draw/opengl_x11_service.h b/compile/target/linux/draw/opengl_x11_service.h index 540448c..d99932a 100644 --- a/compile/target/linux/draw/opengl_x11_service.h +++ b/compile/target/linux/draw/opengl_x11_service.h @@ -1,16 +1,9 @@ -#ifndef DRAW_OPENGL_X11_SERVICE -#define DRAW_OPENGL_X11_SERVICE +#ifndef TARGET_LINUX_DRAW_OPENGL_X11_SERVICE +#define TARGET_LINUX_DRAW_OPENGL_X11_SERVICE #include "allocate/factory.h" #include "code/return.h" -#include -#include -#include -#include -#include -#include -#include #include -#include + class opengl_x11_service_t { friend class opengl_x11_service_factory_t; public: diff --git a/compile/target/linux/draw/window_service.cpp b/compile/target/linux/draw/window_service.cpp index 95fedb6..5f045b2 100644 --- a/compile/target/linux/draw/window_service.cpp +++ b/compile/target/linux/draw/window_service.cpp @@ -2,16 +2,6 @@ #include "draw/window_service.h" #include "inform/text_service.h" #include "target/linux/draw/opengl_x11_service.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include window_service_t::window_service_t( window_service_t::configuration_t* configuration_p diff --git a/compile/project_files.txt b/pack/cpp_files.txt similarity index 100% rename from compile/project_files.txt rename to pack/cpp_files.txt diff --git a/compile/libraries.txt b/pack/libraries.txt similarity index 100% rename from compile/libraries.txt rename to pack/libraries.txt diff --git a/pack/obj_files.txt b/pack/obj_files.txt new file mode 100644 index 0000000..289e8b9 --- /dev/null +++ b/pack/obj_files.txt @@ -0,0 +1 @@ +/home/cogentleman/main/jww/design/3d_models/cube.obj