Statystyki |
» Użytkownicy: 714
» Najnowszy użytkownik: Katiewicky
» Wątków na forum: 2 651
» Postów na forum: 18 755
Pełne statystyki
|
|
|
Poradnik - jak stworzyć prosty program demonstracyjny przy użyciu GLFW oraz GLES... |
Napisane przez: SuperTux - 19-05-2022, 10:57 - Forum: Programowanie
- Brak odpowiedzi
|
|
Witam, z racji tego, że w internecie nie ma podobnych poradników lub wątków poświęconych zagadnieniu jak utworzyć okno GLFW z użyciem OpenGLES i biblioteki FreeGLUT oraz glad to chciałbym ułatwić pracę tym co chcą tworzyć przy użyciu powyższych bibliotek i API, udostępniając część kodu.
Uwaga: Poradnik dotyczy tylko X11, jak Linux Mint przejdzie na Wayland to dodam do poradnika wskazówki jak skompilować biblioteki i program pod system okien używający protokołu Wayland.
(Postaram wyjaśnić w skrócie jak to zrobić)
Kod: sudo apt-get install libx11-dev libgl1-mesa-dev
-Najpierw musimy skompilować biblioteki FreeGLUT oraz GLFW, żeby to zrobić musimy zainstalować wymagane zależności, które są wymienione na poniżej stronie:
https://www.glfw.org/docs/3.3/compile.html
(W zależności od tego czy używamy systemu okien używającego Wayland czy X11, instalujemy odpowiednie zależności)
Wymagane biblioteki do skompilowania GLFW nieuwzględnione w powyższej stronie:
Kod: sudo apt-get install libxrandr-dev libxinerama-dev libxcursor-dev
Używamy make w folderze w którym budujemy GLFW:
-Instalujemy GLFW
Wymagane biblioteki do skompilowania FreeGLUT:
Kod: sudo apt-get install libxi-dev
Jak skompilować i zainstalować bibliotekę FreeGLUT:
http://freeglut.sourceforge.net/docs/install.php
-Po zainstalowaniu zależności niezbędnych do skompilowania bibliotek zależności, kompilujemy bibliotekę.
-Umieszczamy bibliotekę libglfw.so w folderze z projektem:
Jeszcze będzie nam potrzebny plik glad, generujemy go z tej strony:
https://glad.dav1d.de/
-Pobieramy archiwum .zip
-Rozpakowujemy
-Umieszczamy plik glad.c z folderu glad/src do folderu z plikiem main.c
-Umieszczamy rozpakowany katalog glad w folderze z plikiem main.c
-Kopiujemy zawartość poniższej strony i zapisujemy ją w pliku linmath.h:
https://raw.githubusercontent.com/glfw/g.../linmath.h
-Wrzucamy linmath.h do folderu glad
Mój kod źródłowy:
Kod: #include "glad/include/glad/glad.h"
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
#include "glad/linmath.h"
#include <stdlib.h>
#include <stdio.h>
#include <GLES2/gl2.h>
static const struct
{
float x, y;
float r, g, b;
} vertices[3] =
{
{ -0.6f, -0.4f, 1.f, 0.f, 0.f },
{ 0.6f, -0.4f, 0.f, 1.f, 0.f },
{ 0.f, 0.6f, 0.f, 0.f, 1.f }
};
static const char* vertex_shader_text =
"#version 110\n"
"uniform mat4 MVP;\n"
"attribute vec3 vCol;\n"
"attribute vec2 vPos;\n"
"varying vec3 color;\n"
"void main()\n"
"{\n"
" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n"
" color = vCol;\n"
"}\n";
static const char* fragment_shader_text =
"#version 110\n"
"varying vec3 color;\n"
"void main()\n"
"{\n"
" gl_FragColor = vec4(color, 1.0);\n"
"}\n";
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error: %s\n", description);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
int main(void)
{
GLFWwindow* window;
GLuint vertex_buffer, vertex_shader, fragment_shader, program;
GLint mvp_location, vpos_location, vcol_location;
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
window = glfwCreateWindow(640, 480, "Prosty przykład", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwSetKeyCallback(window, key_callback);
glfwMakeContextCurrent(window);
gladLoadGLES2Loader((GLADloadproc) glfwGetProcAddress);
glfwSwapInterval(1);
// NOTE: OpenGL error checks have been omitted for brevity
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL);
glCompileShader(vertex_shader);
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL);
glCompileShader(fragment_shader);
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
mvp_location = glGetUniformLocation(program, "MVP");
vpos_location = glGetAttribLocation(program, "vPos");
vcol_location = glGetAttribLocation(program, "vCol");
glEnableVertexAttribArray(vpos_location);
glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE,
sizeof(vertices[0]), (void*) 0);
glEnableVertexAttribArray(vcol_location);
glVertexAttribPointer(vcol_location, 3, GL_FLOAT, GL_FALSE,
sizeof(vertices[0]), (void*) (sizeof(float) * 2));
while (!glfwWindowShouldClose(window))
{
float ratio;
int width, height;
mat4x4 m, p, mvp;
glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
mat4x4_identity(m);
mat4x4_rotate_Z(m, m, (float) glfwGetTime());
mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);
mat4x4_mul(mvp, p, m);
glUseProgram(program);
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
Kompilacja dla X11:
Kod: gcc -o program main.c glad.c -lm -lGL -lGLU -lglfw3 -lX11 -lpthread -ldl
W razie gdyby coś nie działało piszcie w tym wątku.
|
|
|
Google Photos[Nie Web] Jak to zrobić?? |
Napisane przez: Xvistak - 18-05-2022, 10:52 - Forum: Software
- Odpowiedzi (1)
|
|
No właśnie kolejny problem:
Na razie rclone powiedzmy zadowalająco działa(mam tylko uplaud w jedna strone do chmury nie ważne czy TRUE/FALSE ustawię wcofigu rclone to i tak foldery mogę tylko przez web edytować nie ma Full Acccess,tulko odczyt i foldery bez nazwy tworzy)....,chyba a na OneDrive zmienię.....bo to google.... w windzie to sobie ściągam programik google dysk no i mam.....
Druga opcja to dokker chyba pół dnia instalowałem........
I coś takiego jak "Google-Sync"nie wiem czy dobrze to napisałem.W Google-Console dodałem nowy projekt,autoryzacja OATH2 i....Kolejne Fiasko,bo to nie działa bo zmienili api,czy politykę?Że dopiero PO AKTYWACJI Projektu(czytaj po wysłaniu swojej aplikacji czy programu do weryfikacji do google to włączą???)....-Jednym słowem dla NORMALNEGO USERA to NIE DZIAŁA.....
Zeby było śmieszniej dysk google mint mi w eksploatorze Nemo montuje z autostartu po wklepaniu godu do kluczy po zalogowaniu,tylko google photos.....(kiedyś to jeszcze był sposób włączenia Folderu na dysku do Google Photos i w ten deseń dostęp Dziś już Usuneli Taką Możliwość)
W każdym razie tu na dłóższą metę za dużo osób korzysta z Dysku/Zdjęć Google,żeby przenosić całość na inno chmure (Nawet OneDrive nie ma takiego zasięgu w polsce co Google)
No i niestety z tym porzyceniem Wind to czarno widzę..........
|
|
|
NVIDIA i Open Source |
Napisane przez: SuperTux - 17-05-2022, 18:30 - Forum: Off topic
- Odpowiedzi (1)
|
|
Słyszałem, że NVIDIA opublikowała swoje moduły jądrowe dla linuxa jako oprogramowanie open source.
Co wy o tym myślicie?
Czy jest powód do świętowania?
Artykuł:
https://www.phoronix.com/scan.php?page=a...rnel&num=1
Link do Github - NVIDIA/open-gpu-kernel-modules:
https://github.com/NVIDIA/open-gpu-kernel-modules
Czy to jest równoznaczne z tym, że własnościowy sterownik NVIDIA w kolejnych wydaniach będzie oprogramowaniem o otwartym kodzie źródłowym lub zastąpiony przez nowy sterownik Nouveau?
Czy to jest możliwe, że sterownik NVIDIA zostanie zintegrowany z Jądrem Linux'a w przyszłych wydaniach? (Wiem, że sterowniki własnościowe mają problem z ABI, które jest zazwyczaj niekompatybilne z jądrem, myślę, że przeniesienie sterownika do jądra to byłby wielki krok w przód pod względem kompatybilności i skutkowałoby to mniejszą liczbą problemów. (Widzę, że na forum często pojawiają się problemy z własnościowymi sterownikami.)
|
|
|
GUFW Przestał się uruchamiać. Błędy w terminalu. |
Napisane przez: Blade - 11-05-2022, 19:06 - Forum: Software
- Odpowiedzi (22)
|
|
Witajcie.
Wczoraj zauważyłem że GUFW przestał się uruchamiać.
Podczas próby odpalenia go w terminalu terminal wyrzuca błędy.
Reinstalacja niestety nie rozwiązuje problemu.
Szukałem informacji w internecie ale ciężko mi ogarnąć to samemu.
Załączam potrzebne informacje.
Cytat:blade@blade-GA-770T-D3L:~$ sudo gufw
/usr/bin/gufw: wiersz 2: [: =: oczekiwano operatora jednoargumentowego
Traceback (most recent call last):
File "/usr/share/gufw/gufw/gufw.py", line 30, in <module>
gufw = Gufw(controler.get_frontend())
File "/usr/share/gufw/gufw/gufw/view/gufw.py", line 80, in __init__
self._set_initial_values()
File "/usr/share/gufw/gufw/gufw/view/gufw.py", line 283, in _set_initial_values
self.listening = ListeningReport(self)
File "/usr/share/gufw/gufw/gufw/view/listening.py", line 35, in __init__
self._show_report()
File "/usr/share/gufw/gufw/gufw/view/listening.py", line 48, in _show_report
self._view_report(report, self.previous_report)
File "/usr/share/gufw/gufw/gufw/view/listening.py", line 83, in _view_report
self.gufw.listening_model.set_value(iter_row, 1, int(line_split[1].strip())) # port
ValueError: invalid literal for int() with base 10: 'WARN:'
blade@blade-GA-770T-D3L:~$
Cytat:blade@blade-GA-770T-D3L:~$ inxi -Fxz
System:
Kernel: 5.13.0-41-generic x86_64 bits: 64 compiler: N/A
Desktop: Cinnamon 5.2.7 Distro: Linux Mint 20.3 Una
base: Ubuntu 20.04 focal
Machine:
Type: Desktop Mobo: Gigabyte model: GA-770T-D3L v: x.x serial: <filter>
BIOS: Award v: F4 date: 10/18/2010
CPU:
Topology: Quad Core model: AMD Phenom II X4 945 bits: 64 type: MCP
arch: K10 rev: 3 L2 cache: 2048 KiB
flags: lm nx pae sse sse2 sse3 sse4a svm bogomips: 24107
Speed: 800 MHz min/max: 800/3000 MHz Core speeds (MHz): 1: 800 2: 800
3: 800 4: 800
Graphics:
Device-1: AMD RV710 [Radeon HD 4350/4550] vendor: Gigabyte driver: radeon
v: kernel bus ID: 01:00.0
Display: x11 server: X.Org 1.20.13 driver: ati,radeon
unloaded: fbdev,modesetting,vesa resolution: 1920x1080~60Hz
OpenGL: renderer: AMD RV710 (DRM 2.50.0 / 5.13.0-41-generic LLVM 12.0.0)
v: 3.3 Mesa 21.2.6 direct render: Yes
Audio:
Device-1: AMD SBx00 Azalia vendor: Gigabyte driver: snd_hda_intel
v: kernel bus ID: 00:14.2
Device-2: AMD RV710/730 HDMI Audio [Radeon HD 4000 series]
vendor: Gigabyte driver: snd_hda_intel v: kernel bus ID: 01:00.1
Sound Server: ALSA v: k5.13.0-41-generic
Network:
Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
vendor: Gigabyte driver: r8169 v: kernel port: de00 bus ID: 02:00.0
IF: enp2s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
Drives:
Local Storage: total: 1.03 TiB used: 58.44 GiB (5.6%)
ID-1: /dev/sda vendor: A-Data model: SU800 size: 119.24 GiB temp: 38 C
ID-2: /dev/sdb vendor: Western Digital model: WD10EZEX-08WN4A0
size: 931.51 GiB temp: 31 C
Partition:
ID-1: / size: 31.83 GiB used: 13.58 GiB (42.7%) fs: ext4 dev: /dev/sda1
ID-2: /home size: 84.78 GiB used: 1.74 GiB (2.0%) fs: ext4 dev: /dev/sda5
Sensors:
System Temperatures: cpu: 29.8 C mobo: N/A gpu: radeon temp: 44 C
Fan Speeds (RPM): N/A
Info:
Processes: 231 Uptime: 25m Memory: 3.77 GiB used: 1.24 GiB (33.0%)
Init: systemd runlevel: 5 Compilers: gcc: 9.4.0 Shell: bash v: 5.0.17
inxi: 3.0.38
blade@blade-GA-770T-D3L:~$
|
|
|
Czarny ekran po wpisaniu komendy xinit |
Napisane przez: Blay - 10-05-2022, 21:48 - Forum: Desktop i menadżery okien
- Odpowiedzi (2)
|
|
Witam.
Właśnie zainstalowałem sobie ly (taki display manager), a po zalogowaniu się i wybraniu jako wm i3 wyświetla się czarny ekran. Spróbowałem odpalić window manager bez ly, używając komend xinit, nvidia-xrun oraz startx (też z sudo i bez sudo), lecz nadal nic się nie dzieje.
Tu jest mój log xorga: https://pastebin.com/A9uTrKWb
Zna ktoś jakieś łatwe (bądź skomplikowane ) rozwiązanie na ten problem?
|
|
|
|