#c #opengl #cygwin #glfw
#c #opengl #cygwin #glfw
Вопрос:
Я пытаюсь создать некоторый переносимый код C opengl, используя glad, glfw. В программе используются сокеты, а msys2 не совместим с posix. Итак, я пытаюсь использовать cygwin, который у нас никогда не работал.
Для cygwin нет двоичного файла glfw, но инструкции требуют сборки glfw из исходного кода для Linux, и утверждается, что он должен работать.
Я создал MWE:
#include <glad/glad.h>
//#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <iostream>
#include <cstdlib>
using namespace std;
static void key_callback(GLFWwindow* win,
int key, int scancode,
int action, int mods) {
if (key == GLFW_KEY_ESCAPE amp;amp; action == GLFW_PRESS)
glfwSetWindowShouldClose(win, GL_TRUE);
}
constexpr int w = 1024, h = 768;
int main() {
// glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GLFWwindow* win = glfwCreateWindow(w, h, "Simple example", NULL, NULL);
if (win == nullptr) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwSetKeyCallback(win, key_callback);
glfwMakeContextCurrent(win);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
cerr << "Failed to initialize GLADn";
exit(EXIT_FAILURE);
}
while (!glfwWindowShouldClose(win)) {
glViewport(0, 0, w, h);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(win);
glfwPollEvents();
}
glfwDestroyWindow(win);
glfwTerminate();
exit(EXIT_SUCCESS);
}
Файл glad работает с msys2. Приведенный выше код работает в Linux (Ubuntu 20).
После сборки glfw3 из исходного кода я компилирую его под cygwin с
g -g glfwtest.cc glad.c -o glfwtest -L/usr/local/lib -lglfw3 -lX11
Программа зависает при запуске. Окно не открывается.
Я попытался запустить gdb в cygwin, и это тоже зависает.
Это домашняя система Windows 10, работает нормально. Cygwin был только вчера установлен с gcc 10.xx и gdb.
Комментарии:
1. Какой X-сервер вы используете?
2. Я не был, теперь я установил xinit и использовал startxwin. Это все еще не работает, появляется окно x, но когда я запускаю программу, я не знаю, куда идет окно x? Мне приходит в голову, что мне нужен posix, а не X. Есть ли какой-нибудь способ перенести библиотеки сокетов и файлов posix в msys2 и сохранить Windows родной?