User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

Тема: Эмуляторы для Linux

  1. #11

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK,
    Можно взять пак с ромами+конфигами+профилями : https://volutar.myds.me/xpeccy/config.zip

    Мне интересно будут ли вообще шейдеры работать на малинке, и как там со скоростью с ними...

  2. #12

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dexus Посмотреть сообщение
    ZXMAK,
    Мне интересно будут ли вообще шейдеры работать на малинке, и как там со скоростью с ними...
    как проверить шейдеры в Xpeccy не знаю. А вообще работают, но медленее чем на игровых видеокартах.

    sea.glsl примерно 3-5 fps:
    Код:
    const int NUM_STEPS = 8;
    const float PI	 	= 3.141592;
    const float EPSILON	= 1e-3;
    #define EPSILON_NRM (0.1 / iResolution.x)
    
    // sea
    const int ITER_GEOMETRY = 3;
    const int ITER_FRAGMENT = 5;
    const float SEA_HEIGHT = 0.6;
    const float SEA_CHOPPY = 4.0;
    const float SEA_SPEED = 0.8;
    const float SEA_FREQ = 0.16;
    const vec3 SEA_BASE = vec3(0.1,0.19,0.22);
    const vec3 SEA_WATER_COLOR = vec3(0.8,0.9,0.6);
    #define SEA_TIME (1.0 + iGlobalTime * SEA_SPEED)
    const mat2 octave_m = mat2(1.6,1.2,-1.2,1.6);
    
    // math
    mat3 fromEuler(vec3 ang) {
    	vec2 a1 = vec2(sin(ang.x),cos(ang.x));
        vec2 a2 = vec2(sin(ang.y),cos(ang.y));
        vec2 a3 = vec2(sin(ang.z),cos(ang.z));
        mat3 m;
        m[0] = vec3(a1.y*a3.y+a1.x*a2.x*a3.x,a1.y*a2.x*a3.x+a3.y*a1.x,-a2.y*a3.x);
    	m[1] = vec3(-a2.y*a1.x,a1.y*a2.y,a2.x);
    	m[2] = vec3(a3.y*a1.x*a2.x+a1.y*a3.x,a1.x*a3.x-a1.y*a3.y*a2.x,a2.y*a3.y);
    	return m;
    }
    float hash( vec2 p ) {
    	float h = dot(p,vec2(127.1,311.7));	
        return fract(sin(h)*43758.5453123);
    }
    float noise( in vec2 p ) {
        vec2 i = floor( p );
        vec2 f = fract( p );	
    	vec2 u = f*f*(3.0-2.0*f);
        return -1.0+2.0*mix( mix( hash( i + vec2(0.0,0.0) ), 
                         hash( i + vec2(1.0,0.0) ), u.x),
                    mix( hash( i + vec2(0.0,1.0) ), 
                         hash( i + vec2(1.0,1.0) ), u.x), u.y);
    }
    
    // lighting
    float diffuse(vec3 n,vec3 l,float p) {
        return pow(dot(n,l) * 0.4 + 0.6,p);
    }
    float specular(vec3 n,vec3 l,vec3 e,float s) {    
        float nrm = (s + 8.0) / (PI * 8.0);
        return pow(max(dot(reflect(e,n),l),0.0),s) * nrm;
    }
    
    // sky
    vec3 getSkyColor(vec3 e) {
        e.y = max(e.y,0.0);
        return vec3(pow(1.0-e.y,2.0), 1.0-e.y, 0.6+(1.0-e.y)*0.4);
    }
    
    // sea
    float sea_octave(vec2 uv, float choppy) {
        uv += noise(uv);        
        vec2 wv = 1.0-abs(sin(uv));
        vec2 swv = abs(cos(uv));    
        wv = mix(wv,swv,wv);
        return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
    }
    
    float map(vec3 p) {
        float freq = SEA_FREQ;
        float amp = SEA_HEIGHT;
        float choppy = SEA_CHOPPY;
        vec2 uv = p.xz; uv.x *= 0.75;
        
        float d, h = 0.0;    
        for(int i = 0; i < ITER_GEOMETRY; i++) {        
        	d = sea_octave((uv+SEA_TIME)*freq,choppy);
        	d += sea_octave((uv-SEA_TIME)*freq,choppy);
            h += d * amp;        
        	uv *= octave_m; freq *= 1.9; amp *= 0.22;
            choppy = mix(choppy,1.0,0.2);
        }
        return p.y - h;
    }
    
    float map_detailed(vec3 p) {
        float freq = SEA_FREQ;
        float amp = SEA_HEIGHT;
        float choppy = SEA_CHOPPY;
        vec2 uv = p.xz; uv.x *= 0.75;
        
        float d, h = 0.0;    
        for(int i = 0; i < ITER_FRAGMENT; i++) {        
        	d = sea_octave((uv+SEA_TIME)*freq,choppy);
        	d += sea_octave((uv-SEA_TIME)*freq,choppy);
            h += d * amp;        
        	uv *= octave_m; freq *= 1.9; amp *= 0.22;
            choppy = mix(choppy,1.0,0.2);
        }
        return p.y - h;
    }
    
    vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye, vec3 dist) {  
        float fresnel = clamp(1.0 - dot(n,-eye), 0.0, 1.0);
        fresnel = pow(fresnel,3.0) * 0.65;
            
        vec3 reflected = getSkyColor(reflect(eye,n));    
        vec3 refracted = SEA_BASE + diffuse(n,l,80.0) * SEA_WATER_COLOR * 0.12; 
        
        vec3 color = mix(refracted,reflected,fresnel);
        
        float atten = max(1.0 - dot(dist,dist) * 0.001, 0.0);
        color += SEA_WATER_COLOR * (p.y - SEA_HEIGHT) * 0.18 * atten;
        
        color += vec3(specular(n,l,eye,60.0));
        
        return color;
    }
    
    // tracing
    vec3 getNormal(vec3 p, float eps) {
        vec3 n;
        n.y = map_detailed(p);    
        n.x = map_detailed(vec3(p.x+eps,p.y,p.z)) - n.y;
        n.z = map_detailed(vec3(p.x,p.y,p.z+eps)) - n.y;
        n.y = eps;
        return normalize(n);
    }
    
    float heightMapTracing(vec3 ori, vec3 dir, out vec3 p) {  
        float tm = 0.0;
        float tx = 1000.0;    
        float hx = map(ori + dir * tx);
        if(hx > 0.0) return tx;   
        float hm = map(ori + dir * tm);    
        float tmid = 0.0;
        for(int i = 0; i < NUM_STEPS; i++) {
            tmid = mix(tm,tx, hm/(hm-hx));                   
            p = ori + dir * tmid;                   
        	float hmid = map(p);
    		if(hmid < 0.0) {
            	tx = tmid;
                hx = hmid;
            } else {
                tm = tmid;
                hm = hmid;
            }
        }
        return tmid;
    }
    
    // main
    void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
    	vec2 uv = fragCoord.xy / iResolution.xy;
        uv = uv * 2.0 - 1.0;
        uv.x *= iResolution.x / iResolution.y;    
        float time = iGlobalTime * 0.3 + iMouse.x*0.01;
            
        // ray
        vec3 ang = vec3(sin(time*3.0)*0.1,sin(time)*0.2+0.3,time);    
        vec3 ori = vec3(0.0,3.5,time*5.0);
        vec3 dir = normalize(vec3(uv.xy,-2.0)); dir.z += length(uv) * 0.15;
        dir = normalize(dir) * fromEuler(ang);
        
        // tracing
        vec3 p;
        heightMapTracing(ori,dir,p);
        vec3 dist = p - ori;
        vec3 n = getNormal(p, dot(dist,dist) * EPSILON_NRM);
        vec3 light = normalize(vec3(0.0,1.0,0.8)); 
                 
        // color
        vec3 color = mix(
            getSkyColor(dir),
            getSeaColor(p,n,light,dir,dist),
        	pow(smoothstep(0.0,-0.05,dir.y),0.3));
            
        // post
    	fragColor = vec4(pow(color,vec3(0.75)), 1.0);
    }
    Код:
    glXQueryVersion: 1.4
    Version:   3.1 Mesa 23.2.1-1~bpo12+rpt3
    Renderer:  V3D 4.2
    Vendor:    Broadcom
    GL:        3.1
    GLSL:      1.40
    AA:        0
    Color:     32
    Depth:     24
    Stencil:   0
    ShaderVersion: 1.40


    Вообще графика в Raspios Bookworm с Wayland Wayfire замечательная. У меня включен Wayfire плагины cube и wobbly (виляющие окна, окна ведут себя как резиновые, болтаются и покачиваются, иммитируя резиновую физику, когда мышкой подхватываешь и тянешь), эффекты плавные и приятные глазу, при этом на производительности это не сказывается.

    Брал RPI4 4G попробовать для сигнальной обработки, но вот уже год сижу на ней как не десктопе, т.к. нормальный комп или ноут сейчас приобрести нет возможности. Для разработки конечно слабовато, но geany вполне себе шустро работает. А инет читать и видео смотреть отлично. Единственное что с HD и UHD разрешениями могут быть проблемы с лагами если формат не H264.

    У RPI5 процессор и GPU примерно в два раза быстрей, правда с другой стороны убрали аппаратное ускорение H264, но зато добавили аппаратное ускорение для шифрования. Думаю на RPI5 этот-же шейдер будет давать порядка 6-10 fps.
    Последний раз редактировалось ZXMAK; 06.09.2024 в 02:21.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

    Этот пользователь поблагодарил ZXMAK за это полезное сообщение:

    CityAceE(06.09.2024)

  3. #13

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK, не, в Xpeccy (без S) пиксельные шейдеры в opengl режиме имеются, для имитации crt (какой-никакой). В паке с конфигами по моей ссылке. Но судя по скрину - собрана не GL версия, а с софтовым рендером и масштабированием.
    Последний раз редактировалось Dexus; 06.09.2024 в 01:59.

  4. #14

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dexus Посмотреть сообщение
    ZXMAK, не, в Xpeccy (без S) пиксельные шейдеры в opengl режиме имеются, для имитации crt (какой-никакой). В паке с конфигами по моей ссылке. Но судя по скрину - собрана не GL версия, а с софтовым рендером и масштабированием.
    Хм, ccmake не видит опции для GL:
    Код:
     CMAKE_BUILD_TYPE
     CMAKE_INSTALL_PREFIX             /usr/local
     Qt5Core_DIR                      /usr/lib/aarch64-linux-gnu/cmake/Qt5Core
     Qt5Gui_DIR                       /usr/lib/aarch64-linux-gnu/cmake/Qt5Gui
     Qt5Widgets_DIR                   /usr/lib/aarch64-linux-gnu/cmake/Qt5Widgets
     Qt5_DIR                          /usr/lib/aarch64-linux-gnu/cmake/Qt5
     SDL2MAIN_LIBRARY                 /usr/lib/aarch64-linux-gnu/libSDL2main.a
     SDL2_INCLUDE_DIR                 /usr/include/SDL2
     SDL2_LIBRARY                     /usr/lib/aarch64-linux-gnu/libSDL2main.a;/usr/lib/aarch64-linux-gnu/libSDL2.so
    Добавил вручную cmake -DUSEOPENGL=1, собралось но падает при запуске:
    Код:
    $ gdb ./xpeccy
    GNU gdb (Debian 13.1-3) 13.1
    Copyright (C) 2023 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Type "show copying" and "show warranty" for details.
    This GDB was configured as "aarch64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <https://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
    
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from ./xpeccy...
    (No debugging symbols found in ./xpeccy)
    (gdb) run
    Starting program: /home/pi/ZX/Xpeccy/build/xpeccy 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
    [New Thread 0x7ff271f040 (LWP 518305)]
    [New Thread 0x7ff1c26040 (LWP 518306)]
    Using SDL ver 2.26.5
    Using ZLIB ver 1.2.13
    Using Qt ver 5.15.8
    [New Thread 0x7fed43a040 (LWP 518307)]
    [New Thread 0x7fecc2a040 (LWP 518308)]
    [New Thread 0x7fdf3cf040 (LWP 518311)]
    [Thread 0x7fdf3cf040 (LWP 518311) exited]
    [New Thread 0x7fdf3cf040 (LWP 518312)]
    [New Thread 0x7fdebbf040 (LWP 518313)]
    [Thread 0x7fdf3cf040 (LWP 518312) exited]
    [New Thread 0x7fdf3cf040 (LWP 518314)]
    [New Thread 0x7fde38a040 (LWP 518315)]
    [Thread 0x7fdf3cf040 (LWP 518314) exited]
    [Thread 0x7fdebbf040 (LWP 518313) exited]
    [New Thread 0x7fdebbf040 (LWP 518316)]
    [New Thread 0x7fdf3cf040 (LWP 518317)]
    [Thread 0x7fdebbf040 (LWP 518316) exited]
    [Thread 0x7fde38a040 (LWP 518315) exited]
    [Thread 0x7fdf3cf040 (LWP 518317) exited]
    [New Thread 0x7fdf3cf040 (LWP 518319)]
    SDL audio device opening...success: 48000 960 (32784 / 32784)
    constructor
    Joystick not opened
    [New Thread 0x7fde38a040 (LWP 518324)]
    [New Thread 0x7fdebbf040 (LWP 518325)]
    end:constructor
    [New Thread 0x7fca7be040 (LWP 518326)]
    [New Thread 0x7fbbbde040 (LWP 518329)]
    initializeGL
    vtx_shd
    frg_shd
    end: initializeGL
    qt.qpa.wayland: Wayland does not support QWindow::requestActivate()
    [New Thread 0x7fbb21f040 (LWP 518330)]
    
    Thread 1 "xpeccy" received signal SIGSEGV, Segmentation fault.
    0x0000007ff708c018 in QImage::QImage(QImage const&) () from /lib/aarch64-linux-gnu/libQt5Gui.so.5
    (gdb)
    видимо какая-то ошибка с неправильным вызовом QImage::QImage или до этого где-то память повредилась

    Update: вот с callstack:
    Код:
    (gdb) bt
    #0  0x0000007ff708c018 in QImage::QImage(QImage const&) () at /lib/aarch64-linux-gnu/libQt5Gui.so.5
    #1  0x0000007fed9c3ed4 in QtWaylandClient::QWaylandShmBackingStore::toImage() const () at /lib/aarch64-linux-gnu/libQt5WaylandClient.so.5
    #2  0x0000007ff7330d20 in QPlatformBackingStore::toTexture(QRegion const&, QSize*, QFlags<QPlatformBackingStore::TextureFlag>*) const ()
        at /lib/aarch64-linux-gnu/libQt5Gui.so.5
    #3  0x0000007ff7330724 in QPlatformBackingStore::composeAndFlush(QWindow*, QRegion const&, QPoint const&, QPlatformTextureList*, bool) ()
        at /lib/aarch64-linux-gnu/libQt5Gui.so.5
    #4  0x0000007ff7739b18 in  () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #5  0x0000007ff773b2ec in  () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #6  0x0000007ff773d720 in  () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #7  0x0000007ff77706d0 in QWidget::event(QEvent*) () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #8  0x0000007ff772c0a0 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #9  0x0000007ff6c39d60 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #10 0x0000007ff773e374 in  () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #11 0x0000007ff7740960 in  () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #12 0x0000007ff77594dc in QWidget::repaint(QRect const&) () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #13 0x0000007ff775954c in QWidget::repaint() () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #14 0x00000055556174f0 in MainWin::frame_timer() (this=0x7fffffd240) at /home/pi/ZX/Xpeccy/src/emulwin.cpp:621
    #15 0x0000007ff6c76628 in  () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #16 0x0000007ff6c7ac40 in QTimer::timeout(QTimer::QPrivateSignal) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #17 0x0000007ff6c6a5e4 in QObject::event(QEvent*) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #18 0x0000007ff772c0a0 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/aarch64-linux-gnu/libQt5Widgets.so.5
    #19 0x0000007ff6c39d60 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #20 0x0000007ff6c98d80 in QTimerInfoList::activateTimers() () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #21 0x0000007ff6c996ec in  () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    --Type <RET> for more, q to quit, c to continue without paging--
    #22 0x0000007ff521774c in g_main_context_dispatch () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
    #23 0x0000007ff52179e0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
    #24 0x0000007ff5217a84 in g_main_context_iteration () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
    #25 0x0000007ff6c99ac8 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #26 0x0000007ff6c38278 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #27 0x0000007ff6c412fc in QCoreApplication::exec() () at /lib/aarch64-linux-gnu/libQt5Core.so.5
    #28 0x000000555560f060 in main(int, char**) (ac=<optimized out>, av=0x7fffffefb8) at /home/pi/ZX/Xpeccy/src/main.cpp:307
    Дело не в OpenGL, сам OpenGL прекрасно работает.
    Последний раз редактировалось ZXMAK; 06.09.2024 в 03:30.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #15

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK, видимо что-то с qtGL не правильно делается. Там индикаторы (иконки/надписи) поверху GL контекста должны отрисовываются. И там изначально пришлось пожонглировать порядком создания/инициализации чтобы все отрисовывалось. Возможно с этим что-то не так. А может и с Legacy, который с добавленим qt6 добавили. Можно попробовать собрать версию годичной давности.

  6. #16

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    не совсем понятно, а зачем для этого QT? ведь иконки проще напрямую в GL отрендерить
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмуляторы ZX Spectrum для Raspberry Pi
    от CityAceE в разделе Эмуляторы
    Ответов: 33
    Последнее: 03.09.2024, 05:57
  2. Эмуляторы для psp (Atari ST и Amiga)
    от Руслан в разделе Эмуляторы
    Ответов: 7
    Последнее: 19.11.2012, 19:50
  3. Дистрибутив Puppy Linux для эмуляторщиков.
    от neon79 в разделе Эмуляторы
    Ответов: 60
    Последнее: 22.06.2012, 00:47
  4. ЭМУЛЯТОРЫ ДЛЯ НАЛАДОННИКОВ
    от XOUT в разделе Эмуляторы
    Ответов: 5
    Последнее: 25.03.2007, 12:11
  5. zx-эмуляторы на Java,в частности для Motorola?
    от razer в разделе Эмуляторы
    Ответов: 15
    Последнее: 18.07.2006, 14:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •