Creating window in linux

How do you create a window in Linux with C++?

I was expecting a Linux API similar to the Windows API. All I see on Google is references to Qt and GTK. I really don’t need anything more than a simple window to draw on with OpenGL, so these libraries appear bloated for my use. What do Qt and GTK use to create windows under Linux? Is there nothing more low-level?

The X Windows API is typically the lowest level API for generic «Windowing» on *nix. tronche.com/gui/x/xlib/introduction

I am curious: why would you expect «linux api» (whatever you mean by that exactly) to be the same as winapi?

You really don’t want to go lower level. Use one of the higher level abstractions (QT/GTK/WxLib/More) otherwise you will get stuck in a lot of minutia that you don’t want to handle that the higher level frameworks take care off. They all allow you to get hold of an OpenGL layer and draw on it.

If someone ask for the lowest possible API, please answer on that question. Please don’t talk about «why use that, use this, . «.

6 Answers 6

The X window system generally does the drawing — you then use a toolkit such as Qt or GTK on top of raw Xlib to provide event loops, drag and drop, starting apps on mouseclicks and all the other ‘desktop’ stuff

It’s fairly easy to work directly with Xlib and opengl or if you just want to learn opengl the glut provides the framework you need to display a window, handle mouse/keyboard events and so on.

Читайте также:  Копирование файлов через ssh linux

In principle, you could even avoid Xlib and just transmit (and receive, and interpret) raw X11 protocol. But that is not reasonable.

For OpenGL, the easiest way to do it is by using GLUT or SDL. Here’s an approximate example using GLUT:

#include int main (int argc, char **argv) < glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("My new window"); /* . */ >

You really want to avoid using Xlib directly as it’s extremely tedious to use. Furthermore, GLUT and SDL make it easier to port your OpenGL application to different platforms.

@LokiAstari: If you mean some kind of opaque type that holds the drawing state, I don’t really know. When I used to code in OpenGL (back in version 1.2), there was only one, global, place to draw which was handled internally by the OpenGL implementation.

Updated answer for 2019. Unix like systems normally uses the X window system. You can work with it directly using Xlib this is the low level API. But you likely need a more welcoming and cross-platform solution. You can use:

GLFW is written in C and has native support for Windows, macOS and many Unix-like systems using the X Window System, such as Linux and FreeBSD.

Once installed, create a window with :

#include . . //Entry and glfwInit() . GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL); glfwMakeContextCurrent(window); 

Источник

How do you create a window in Linux with C++?

For OpenGL, the easiest way to do it is by using GLUT or SDL. Here’s an approximate example using GLUT:

#include int main (int argc, char **argv) < glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("My new window"); /* . */ >

You really want to avoid using Xlib directly as it’s extremely tedious to use. Furthermore, GLUT and SDL make it easier to port your OpenGL application to different platforms.

Читайте также:  H 264 codec for linux

The X window system generally does the drawing — you then use a toolkit such as Qt or GTK on top of raw Xlib to provide event loops, drag and drop, starting apps on mouseclicks and all the other ‘desktop’ stuff

It’s fairly easy to work directly with Xlib and opengl or if you just want to learn opengl the glut provides the framework you need to display a window, handle mouse/keyboard events and so on.

Updated answer for 2019. Unix like systems normally uses the X window system. You can work with it directly using Xlib this is the low level API. But you likely need a more welcoming and cross-platform solution. You can use:

  • OpenGL Utility Toolkit — GLUT
  • Simple and Fast Multimedia Library — SFML
  • Simple DirectMedia Layer — SDL
  • Graphics Library Framework — GLFW (my recommendation)

GLFW is written in C and has native support for Windows, macOS and many Unix-like systems using the X Window System, such as Linux and FreeBSD.

Once installed, create a window with :

#include . . //Entry and glfwInit() . GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL); glfwMakeContextCurrent(window); 

Источник

Как создать окно в Linux с С++?

Я ожидал API Linux, похожий на Windows API. Все, что я вижу в Google, — это ссылки на Qt и GTK. Мне действительно не нужно ничего, кроме простого окна, которое можно использовать с OpenGL, поэтому эти библиотеки кажутся раздутыми для моего использования. Что делают Qt и GTK для создания окон под Linux? Нет ничего более низкого уровня?

ОТВЕТЫ

Ответ 1

Система окна X, как правило, рисует — тогда вы используете набор инструментов, такой как Qt или GTK, поверх необработанного Xlib для создания циклов событий, перетаскивания, запуска приложений на mouseclicks и всех других «настольных» материалов

Читайте также:  Broadcom linux driver ubuntu

Довольно легко работать с Xlib и opengl, или если вы просто хотите изучить opgal glut обеспечивает структуру, необходимую для отображения окна, обработки событий мыши/клавиатуры и т.д.

Ответ 2

Для OpenGL самый простой способ сделать это — использовать GLUT или SDL, Здесь примерный пример с использованием GLUT:

#include int main (int argc, char **argv) < glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("My new window"); /* . */ >

Вы действительно хотите избежать использования Xlib напрямую, поскольку это очень утомительно для использования. Кроме того, GLUT и SDL упрощают перенос приложения OpenGL на разные платформы.

Ответ 3

Акс Мартин сказал, что X11 (или его fork XOrg в наши дни) — это система окон, но вы действительно можете писать приложения X11 (то есть клиенты) без использования инструментария, просто используя библиотеки X. См. здесь для документации.

Как правило, это не самая лучшая идея, так как это довольно болезненно и потребует много кода для того, чтобы относительно простые приложения работали так, как вы ожидаете.

Ответ 4

Обновленный ответ на 2019 год. Unix-подобные системы обычно используют систему X Window. Вы можете работать с ним напрямую, используя Xlib — это низкоуровневый API. Но вам, вероятно, нужно более приветливое и кроссплатформенное решение. Вы можете использовать OpenGL Utility Toolkit — GLUT или Простую и быструю мультимедийную библиотеку — SMFL или Simple DirectMedia Layer — SDL, или GLFW. Я рекомендую GLFW.

GLFW написан на C и имеет встроенную поддержку Windows, macOS и многих Unix-подобных систем, использующих систему X Window, таких как Linux и FreeBSD.

После установки создайте окно с:

#include . . //Entry and glfwInit() . GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL); glfwMakeContextCurrent(window); 

Источник

Оцените статью
Adblock
detector