LINUX.ORG.RU

SDL ошибка рендерера


0

2

Скачал, собрал SDL2. Создал проект в code::blocks, подключил пути к инклюдам и либам, добавил либы, закинул пробный код отсюда

Проект компилится, но пишет

SDL_CreateRenderer Error: Couldn't find matching render driver.
С софтварным рендерером работает нормально. Установил пакет freeglut3-dev, не помогло


freeglut3-dev не причем.

какая точная версия SDL? 2.0.3?

что данный код исполняет?

int numdrivers = SDL_GetNumRenderDrivers (); 
cout << "Render driver count: " << numdrivers << endl; 
for (int i=0; i<numdrivers; i++) { 
    SDL_RendererInfo drinfo; 
    SDL_GetRenderDriverInfo (0, &drinfo); 
    cout << "Driver name ("<<i<<"): " << drinfo.name << endl; 
    if (drinfo.flags & SDL_RENDERER_SOFTWARE) cout << " the 
renderer is a software fallback" << endl; 
    if (drinfo.flags & SDL_RENDERER_ACCELERATED) cout << " the 
renderer uses hardware acceleration" << endl; 
    if (drinfo.flags & SDL_RENDERER_PRESENTVSYNC) cout << " present 
is synchronized with the refresh rate" << endl; 
    if (drinfo.flags & SDL_RENDERER_TARGETTEXTURE) cout << " the 
renderer supports rendering to texture" << endl; 
} 

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Вывод программы:

ender driver count: 1
Driver name (0): software
 the renderer is a software fallback
 the renderer supports rendering to texture
Версия драйвера:
AMD Proprietary Linux Driver Version Identifier:14.30.4

hemul
() автор топика
Ответ на: комментарий от x4DA
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7340 Graphics
OpenGL version string: 4.4.13084 Compatibility Profile Context 14.301.1001
OpenGL shading language version string: 4.40
OpenGL extensions:
hemul
() автор топика
Ответ на: комментарий от x4DA

Бенчмарк unigine valley со скрипом, в 4 фпс, но работает

hemul
() автор топика
Ответ на: комментарий от aplay
direct rendering: Yes
    GL_AMD_multi_draw_indirect, GL_AMD_name_gen_delete, 
    GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect, 
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_EXT_copy_buffer, GL_EXT_copy_texture, GL_EXT_direct_state_access, 
hemul
() автор топика
Ответ на: комментарий от hemul

Гугл говорит:

Make sure you downloaded the OpenGL development libraries or SDL won't build with OpenGL support. I had this issue in my first try. Of course rebuild SDL when you do that.

aplay ★★★★★
()
Ответ на: комментарий от aplay

Спасибо. Я установил либы, а SDL не пересобрал. У меня еще один вопрос. Скомпилил бинарник на ноуте , перенес на другой комп и при запуске пишет

SDL_Init Error: No available video device
Чего здесь ему может не хватать?

hemul
() автор топика
Ответ на: комментарий от x4DA
maxim@MaximPC:~/Документы/programs$ glxinfo | grep -i opengl
OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NVCF
OpenGL version string: 3.0 Mesa 8.0.5
OpenGL shading language version string: 1.30
OpenGL extensions:

Вот вывод программы.

maxim@MaximPC:~/Документы/programs$ ./sdltest
Render driver count: 4
Driver name (0): opengl
 the renderer uses hardware acceleration
 present is synchronized with the refresh rate
 the renderer supports rendering to texture
Driver name (1): opengles2
 the renderer uses hardware acceleration
 present is synchronized with the refresh rate
 the renderer supports rendering to texture
Driver name (2): opengles
 the renderer uses hardware acceleration
 present is synchronized with the refresh rate
Driver name (3): software
 the renderer is a software fallback
 the renderer supports rendering to texture
SDL_Init Error: No available video device

Причем это не зависит от установленного рендерера, так как ошибка при инициализации самого SDL, а не на выборе рендерера

hemul
() автор топика
Ответ на: комментарий от hemul

дык может собрать либу с отладочной информацией и посмотреть, почему он ничего не находит? Там код довольно простой, понять всё можно даже без поллитры

gavlig ★★★
()
Ответ на: комментарий от x4DA

Поставил проприетарные дрова - не помогло.

maxim@MaximPC:~/Документы/programs$ ldd sdltest
	linux-gate.so.1 =>  (0xf77d6000)
	libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0xf7673000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7587000)
	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7560000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7410000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf740c000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf73f3000)
	librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf73ea000)
	/lib/ld-linux.so.2 (0xf77d7000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf73cc000)
Проверил все либы - все на месте.

hemul
() автор топика
Ответ на: комментарий от x4DA

твой ldd ничего не покажет потому что бекенды SDL2 открывает через dlopen

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Да. Другой комп компилит и запускает откомпиленные собою программы нормально. А вот перенесенную не хочет. Комп на 64 битной системе, на ноуте, где компилится, 32 битная, но я не думаю, что это как-то влияет

hemul
() автор топика
Ответ на: комментарий от x4DA

Действительно, первые либы разные. Только к ним не пишется их расположения и я не понимаю где их искать

Вот вывод c программы, скомпиленной на компе

	linux-vdso.so.1 =>  (0x00007fff085ff000)
	libSDL2-2.0.so.0 => /usr/local/lib/libSDL2-2.0.so.0 (0x00007f870b1a6000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f870ae9f000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f870ac1c000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f870aa06000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f870a67a000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f870a475000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f870a259000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f870a051000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f870b4ec000)

Вывод ldd для скомпилированного на ноуте бинарника выше. Ноутовская версия просит linux-gate.so.1 , а компьютерная linux-vdso.so.1

hemul
() автор топика
Ответ на: комментарий от hemul

первые либы это норма, они и будут отличаться между платформами.

надо натравить strace на приложение, найти write(«No available video device», ...) и посмотреть какие либы SDL пыталась открыть до этого.

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Для отрывка кода

    int numdrivers = SDL_GetNumRenderDrivers ();
cout << "Render driver count: " << numdrivers << endl;
for (int i=0; i<numdrivers; i++) {
    SDL_RendererInfo drinfo;
    SDL_GetRenderDriverInfo (i, &drinfo);
    cout << "Driver name ("<<i<<"): " << drinfo.name << endl;
    if (drinfo.flags & SDL_RENDERER_SOFTWARE) cout << " the  renderer is a software fallback" << endl;
    if (drinfo.flags & SDL_RENDERER_ACCELERATED) cout << " the  renderer uses hardware acceleration" << endl;
    if (drinfo.flags & SDL_RENDERER_PRESENTVSYNC) cout << " present is synchronized with the refresh rate" << endl;
    if (drinfo.flags & SDL_RENDERER_TARGETTEXTURE) cout << " the renderer supports rendering to texture" << endl;
}
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0){
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }

вывод strace

write(1, "Render driver count: 4\n", 23) = 23
write(1, "Driver name (0): opengl\n", 24) = 24
write(1, " the renderer uses hardware acce"..., 41) = 41
write(1, " present is synchronized with th"..., 47) = 47
write(1, " the renderer supports rendering"..., 44) = 44
write(1, "Driver name (1): opengles2\n", 27) = 27
write(1, " the renderer uses hardware acce"..., 41) = 41
write(1, " present is synchronized with th"..., 47) = 47
write(1, " the renderer supports rendering"..., 44) = 44
write(1, "Driver name (2): opengles\n", 26) = 26
write(1, " the renderer uses hardware acce"..., 41) = 41
write(1, " present is synchronized with th"..., 47) = 47
write(1, "Driver name (3): software\n", 26) = 26
write(1, " the renderer is a software fall"..., 37) = 37
write(1, " the renderer supports rendering"..., 44) = 44
brk(0)                                  = 0x921c000
brk(0x923d000)                          = 0x923d000
clock_gettime(CLOCK_MONOTONIC, {5905, 403021769}) = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0xf7601414, [], 0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {0xf7601414, [], 0}, NULL, 8) = 0
futex(0xf733f06c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
mmap2(NULL, 8388608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0xfffffffff6afa000
mprotect(0xf6afa000, 4096, PROT_NONE)   = 0
clone(child_stack=0xf72f9484, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xf72f9bd8, tls=0xf72f9bd8, child_tidptr=0xff90d490) = 23698
write(1, "SDL_Init Error: No available vid"..., 42) = 42
exit_group(1)   

hemul
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.