Копия проекта с 01

This commit is contained in:
parent dd3c1d7b02
commit bd6e8200d5
4 changed files with 222 additions and 0 deletions

17
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,17 @@
{
"configurations": [
{
"name": "some_name",
"includePath": [
"${workspaceFolder}/include",
"${workspaceFolder}/../dependencies/GLFW/include",
"${workspaceFolder}/../dependencies/glad/include"
],
"compilerPath": "C:/MinGW/bin/g++.exe",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "gcc-x86"
}
],
"version": 4
}

32
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,32 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: make сборка",
"command": "make",
"args": [
"${input:target}"
],
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Задача создана отладчиком."
}
],
"inputs": [
{
"id": "target",
"description": "Цель сборки (all, list, clean)",
"default": "all",
"type": "promptString"
},
],
"version": "2.0.0"
}

98
Makefile Normal file
View File

@ -0,0 +1,98 @@
# Компилятор и директория проекта
ifeq ($(OS), Windows_NT)
# С возможностью сборки x32
ifeq ($(MAKECMDGOALS), x32)
CC = C:/MinGW/bin/g++.exe
else
CC = C:/MinGW64/bin/g++.exe
endif
PROJECT_DIR = $(shell echo %cd%)
PATH_SEPARATOR = \\
# Имя исполняемого файла
EXECUTABLE = $(notdir $(strip $(PROJECT_DIR))).exe
else
CC = g++
PROJECT_DIR = $(shell pwd)
PATH_SEPARATOR = /
# Имя исполняемого файла
EXECUTABLE = $(notdir $(strip $(PROJECT_DIR)))
endif
# Опции компилятора
CFLAGS += -c
CFLAGS += -I./include
CFLAGS += -I../dependencies/GLFW/include
CFLAGS += -I../dependencies/glad/include
# Опции линкера
LDFLAGS += --std=c++11
# Архитектурозависимые опции линкера
ifeq ($(OS), Windows_NT)
# GLFW в зависимости от архитектуры
ifeq ($(MAKECMDGOALS), x32)
LDFLAGS += -L../dependencies/GLFW/lib-mingw
else
LDFLAGS += -L../dependencies/GLFW/lib-mingw-w64
endif
LDFLAGS += -static
LDFLAGS += -lglfw3dll
LDFLAGS += -lopengl32
else
LDFLAGS += -lglfw
LDFLAGS += -lGL
endif
# Библиотека GLAD
GLAD := ../dependencies/glad/src/glad.c
GLAD_O := $(GLAD:.c=.o)
# Файлы из директории src
SOURCES_C = $(wildcard src/*.c)
SOURCES_CPP = $(wildcard src/*.cpp)
# Директория с объектными файлами
OBJ_DIR := Obj
# Объектные файлы
OBJECTS = $(addprefix $(OBJ_DIR)/,$(SOURCES_C:src/%.c=%.o) $(SOURCES_CPP:src/%.cpp=%.o))
# Для x32 сборки под Windows
ifeq ($(OS), Windows_NT)
ifeq ($(MAKECMDGOALS), x32)
x32: all
endif
endif
# Цель по умолчанию, зависит от EXECUTABLE
all: $(EXECUTABLE)
# Цель сборки исполняемого файла, зависит от OBJ_DIR, OBJECTS и GLAD_O
$(EXECUTABLE): $(OBJ_DIR) $(OBJECTS) $(GLAD_O)
$(CC) $(OBJECTS) $(GLAD_O) $(LDFLAGS) -o $@
# Цель для сборки GLAD
$(GLAD_O): $(GLAD)
$(CC) $(CFLAGS) $< -o $@
# Цель для создания директории с объектными файлами
$(OBJ_DIR):
@mkdir $(OBJ_DIR)
# Цель сборки объектных файлов
$(OBJ_DIR)/%.o: src/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o: src/%.cpp
$(CC) $(CFLAGS) $< -o $@
# Цель вывода всех файлов, учавствтующих в сборке
list:
@echo "В сборке участвуют:" $(OBJECTS)
# Очистка
ifeq ($(OS), Windows_NT)
clean: $(OBJ_DIR)
@rmdir /s /q $(OBJ_DIR)
else
clean: $(OBJ_DIR)
@rm -f $(EXECUTABLE) $(OBJECTS)
endif

75
src/main.cpp Executable file
View File

@ -0,0 +1,75 @@
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_CAPTION "OPENGL notes on rekovalev.site"
// Функция-callback для изменения размеров буфера кадра в случае изменения размеров поверхности окна
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
int main(void)
{
GLFWwindow* window; // Указатель на окно GLFW3
// Инициализация GLFW3
if (!glfwInit())
{
std::cout << "GLFW init error\n";
return -1;
}
// Завершение работы с GLFW3 перед выходом
atexit(glfwTerminate);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); // Мажорная версия спецификаций OpenGL
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); // Минорная версия спецификаций OpenGL
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Контекст OpenGL, который поддерживает только основные функции
// Создание окна GLFW3 с заданными шириной, высотой и заголовком окна
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_CAPTION, NULL, NULL);
if (!window)
{
std::cout << "GLFW create window error\n";
return -1;
}
// Установка основного контекста окна
glfwMakeContextCurrent(window);
// Установка callback-функции для изменения размеров окна и буфера кадра
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
glfwSwapInterval(1); // Вертикальная синхронизация
// Загрузка функций OpenGL с помощью GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "GLAD load GL error\n";
return -1;
}
// Установка цвета очистки буфера цвета
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// Пока не произойдет событие запроса закрытия окна
while(!glfwWindowShouldClose(window))
{
// Очистка буфера цвета
glClear(GL_COLOR_BUFFER_BIT);
// Тут производится рендер
// ...
// Представление содержимого буфера цепочки показа на окно
glfwSwapBuffers(window);
// Обработка системных событий
glfwPollEvents();
}
return 0;
}