Trabalhando com opengl
Agora vamos rodar um projeto opengl com foxmake no windows
Vamos criar um projeto que utiliza opengl. Faça o seguinte: Baixe o glfw, depois o glew e, se quiser, pode baixar também o glm para cálculos matemáticos e com vetores e matrizes. Logo, as versões atuais "18/06/2026", são as seguintes:
- glfw-3.4.bin.WIN64.zip
- glew-2.3.1-win32.zip
- glm-1.0.3.zip
Atenção
Esse tutorial ensina a utilizar o opengl para windows, arquitetura x86_64. Para outras arquiteturas ou sistema linux, são necessárias adaptações!
Crie uma pasta para o projeto com o nome que desejar. Mas, para esse tutorial, vamos assumir que o nome é "ProjGL".
No seu projeto criado, crie dentro da pasta raiz do projeto as pastas: "include" e "lib".
Instalando o glfw
Agora, descompacte o "glfw-3.4.bin.WIN64.zip" e procure pelas pastas "include" e "lib-mingw-w64. Agora, copie o conteúdo da pasta "include" para a pasta "include" que você criou na raiz do seu projeto. Copie também o conteúdo da pasta "lib-mingw-w64" para pasta "lib" que você criou na raiz do projeto. Caso queira, pode copiar o arquivo glfw3.dll para a raiz do seu projeto, ao invés da pasta "lib".
Instalando o glew
Descompacte o arquivo "glew-2.3.1-win32.zip" e procure pelas pastas "include", "bin", "lib". Agora, copie o conteúdo da pasta "include" para a pasta "include" da raiz do seu projeto. Copie os arquivos ".lib" da pasta "lib", conforme a arquitetura (no caso "x64"), para a pasta "lib" na raiz do projeto. Agora, na pasta "bin", procure pelo arquivo "glew32.dll" conforme a arquitetura (no caso "x64"). Copie o arquivo "glew32.dll" para a raiz do seu projeto ou para a pasta "lib".
Instalando o glm
Para instalar o glm é mais simples. Extraia o conteúdo do arquivo "glm-1.0.3.zip" e copie o conteúdo da subpasta "glm" que está dentro da pasta "glm", para a pasta "include" do seu projeto.
Atenção
Não copie a pasta "glm" raiz do arquivo extraído, copie a pasta "glm" que está dentro dela, junta de outras pastas!
Feito isto tudo, a pasta "include deve estar mais ou menos assim:
ProjGL
└── include
├── GL
├── GLFW
└── glm
A árvore de diretórios acima, ignora o conteúdo das subpastas de "include"!
E a pasta lib, deve ter o seguinte conteúdo e a pasta raiz deve ter o arquivo "glew32.dll" e, caso tenha optado por deixar na raiz também o arquivo "glfw3.dll", este estará na raiz também.
ProjGL ├── lib │ ├── glew32.lib │ ├── glew32s.lib │ ├── libglfw3.a │ └── libglfw3dll.a ├── glew32.dll └── glfw3.dll
Atenção
Atenção: se fizer uma linkagem estática, não necessita do arquivo glfw3.dll. Se fizer uma linkagem dinâmica, o arquivo glfw3.dll é necessário! Nesse projeto, vamos utilizar a lib "libglfw3.a", linkando esta lib estaticamente.
Agora que está tudo configurado, vamos ao arquivo "main.cpp" onde estará o código opengl/c++ da aplicação:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
int main() {
// Initialize GLFW
if (!glfwInit()) {
std::cerr << "Falha ao iniciar o GLFW\n";
return -1;
}
// Cria no modo janela o contexto OpenGL
GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL com MinGW e Foxmake", nullptr, nullptr);
if (!window) {
std::cerr << "Falha ao criar janela GLFW\n";
glfwTerminate();
return -1;
}
// Faz a janela como contexto corrente
glfwMakeContextCurrent(window);
// Inicializa o GLEW
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK) {
std::cerr << "Falha ao inicializar o GLEW\n";
return -1;
}
// Loop principal
while (!glfwWindowShouldClose(window)) {
// Cor da janela
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Operação de Swap para bufferes
glfwSwapBuffers(window);
// Poll para processar eventos
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
Atenção
O exemplo acima não utiliza glm, por ser um exemplo minimalista!
Agora crie o arquivo FoxMakefile com o seguinte conteúdo:
output.file.name=projgl.exe
src.dir=src
bin.dir=bin
obj.dir=obj
build.dir=build
build.files=glew32.dll glfw3.dll
compiler.params=-Wall -g
linker.params=-s
include.dirs=include
lib.dirs=lib
libs=glfw3 glew32 opengl32 gdi32
Agora, pode executar o build com o foxmake com o seguinte comando (na raiz do projeto):
foxmake buildall
Se tudo correr bem, o seu projeto terá a seguinte estrutura de arquivos e pastas:
ProjGL
├── __lwtimes.txt
├── FoxMakefile
├── glew32.dll
├── glfw3.dll
├── bin
│ └── projgl.exe
├── build
│ ├── glew32.dll
│ ├── glfw3.dll
│ └── projgl.exe
├── include
│ ├── GL
│ ├── GLFW
│ └── glm
├── lib
│ ├── glew32.lib
│ ├── glew32s.lib
│ ├── libglfw3.a
│ └── libglfw3dll.a
├── obj
│ └── src
│ └── main.o
└── src
└── main.cpp
Agora rode o projeto com o seguinte comando:
.\build\projgl.exe
Com isso verá uma janela de cor cinza, é o resultado do programa rodado.
Download: projgl-windows.zip.
Finalizando
Esta é a última aula sobre o foxmake. Espero que tenha gostado do conteúdo e, divirta-se, automatizando o build de seus projetos em C/C++ com o foxmake.