Копия проекта с 01
This commit is contained in:
parent
dd3c1d7b02
commit
bd6e8200d5
|
@ -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
|
||||||
|
}
|
|
@ -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"
|
||||||
|
}
|
|
@ -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
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue