C/C++

graphics programming

9 3348
Nukleo  
Hi,

i'm looking for a banana pi graphics programming configuration. Is there any way to use OpenVG on banana pi? Which os image includes the required packages, libraries and headers by default?

thanks in advance
Nukleo

From the link: http://linux-sunxi.org/GraphicsPerformanceX11
OpenVG - is an API designed for hardware-accelerated 2D vector graphics. It is not very popular in open source software in general. Or in other words, it is not going to accelerate anything even if we had good drivers for Mali400 drivers.

Nukleo  
tony_zhang replied at Dec 23, 2015 21:37
From the link: http://linux-sunxi.org/GraphicsPerformanceX11
OpenVG - is an API designed for hardwar ...

Ok, thats a pitty. Could you tell me another approach to build 2D (or 3D) vector graphic applications on BP without using a window system? Searching the web for opengl ES provides no adequate results for BP.

Edited by destroyedlolo at Dec 24, 2015 16:08

If you don't want windowing system, you have a look on DirectFB but ...
  • it's seem this project is dead as the website disapeared in september (but you may generate API documentation directly from your distrib package)
  • it's raw bitmap manipulation so it you want to add vector handling, or you have to write your own interface for them, or you have to you have to link it with 3rd party library (probably, SDL  ???). I seens also OpenGL is working with it but I didn't tested.

Anyway, I did some good dashboard using DirectFB on my BananaPI and on an A13 tablet both running Gentoo.
You will find my technical layer Github which ambed Lua as enduser language.

Nukleo  
Thanks a lot for this tip. I will check DirectFB.

Nukleo  
I was able to execute a first simple directfb application but the result looks not very good. The application displays a diagonal line but only the first width/4 rows are used. I'm not able to use the full screen. My current system configuration is:

- Board: Banana PI
- Touch-Display: Waveshare 7 inch 800*480 Capacitive Touch Screen LCD Display HDMI
- OS: Raspbian for Banana PI from Display Manufacturer

I install libdirectfb-bin and libdirectfb-dev
  1. dpkg -l | grep directfb
  2. ii  libdirectfb-1.2-9:armhf         1.2.10.0-5                              armhf        direct frame buffer graphics - shared libraries
  3. ii  libdirectfb-bin                       1.2.10.0-5                              armhf        direct frame buffer graphics - binaries
  4. ii  libdirectfb-dev                      1.2.10.0-5                              armhf        direct frame buffer graphics library - development files
  5. ii  libdirectfb-extra:armhf         1.2.10.0-5                              armhf        direct frame buffer graphics - extra providers
Copy the Code
I use the following programm:
  1. #include <stdio.h>                                                                                                                                                                     
  2. #include <unistd.h>                                                                                                                                                                    
  3. #include <directfb.h>                                                                                                                                                                  
  4.                                                                                                                                                                                        
  5. static IDirectFB *dfb = NULL;                                                                                                                                                         
  6. static IDirectFBSurface *primary = NULL;                                                                                                                                               
  7. static int screen_width  = 0;                                                                                                                                                         
  8. static int screen_height = 0;                                                                                                                                                         
  9.                                                                                                                                                                                        
  10. #define DFBCHECK(x...)                                         \                                                                                                                       
  11.   {                                                            \                                                                                                                       
  12.     DFBResult err = x;                                         \                                                                                                                       
  13.                                                                \                                                                                                                       
  14.     if (err != DFB_OK)                                         \                                                                                                                       
  15.       {                                                        \                                                                                                                       
  16.         fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \                                                                                                                       
  17.         DirectFBErrorFatal( #x, err );                         \                                                                                                                       
  18.       }                                                        \                                                                                                                       
  19.   }                                                                                                                                                                                    
  20.                                                                                                                                                                                        
  21. int main (int argc, char **argv)                                                                                                                                                      
  22. {                                                                                                                                                                                      
  23.   DFBSurfaceDescription dsc;                                                                                                                                                           
  24.                                                                                                                                                                                        
  25.   DFBCHECK (DirectFBInit (&argc, &argv));                                                                                                                                             
  26.   DFBCHECK (DirectFBCreate (&dfb));                                                                                                                                                   
  27.   DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));                                                                                                                        
  28.                                                                                                                                                                                        
  29.   dsc.flags = DSDESC_CAPS;                                                                                                                                                            
  30.   dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;                                                                                                                                       
  31.                                                                                                                                                                                        
  32.   DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary ));                                                                                                                                
  33.   DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));                                                                                                               
  34.   DFBCHECK (primary->FillRectangle ( primary, 0, 0, screen_width-1, screen_height-1 ));                                                                                                
  35.                                                                                                                                                                                        
  36.   DFBCHECK (primary->SetColor ( primary, 0x80, 0x80, 0xff, 0xff ));                                                                        
  37.   DFBCHECK ( primary->DrawLine(primary, 0,0,screen_width-1, screen_height-1));
  38.   DFBCHECK (primary->Flip (primary, NULL, 0));                                                                                                                                         
  39.                                                                                                                                                                                        
  40.   sleep (5);                                                                                                                                                                           
  41.                                                                                                                                                                                        
  42.   primary->Release( primary );                                                                                                                                                         
  43.   dfb->Release( dfb );                                                                                                                                                                 
  44.                                                                                                                                                                                        
  45.   return 0;                                                                                                                                                                           
  46. }      
Copy the Code
and compile it with:
  1. gcc -I /usr/include/directfb -L /usr/lib -ldirectfb -o hello dfb.c
Copy the Code
fbset provides the following information:
  1. bananapi@devpi1 ~/projects/sandbox/directfb_course/01_hello_world $ fbset                    
  2.                                                                                              
  3. mode "800x480-66"                                                                           
  4.     # D: 32.000 MHz, H: 34.483 kHz, V: 65.681 Hz                                             
  5.     geometry 800 480 800 960 32                                                              
  6.     timings 31250 40 40 29 13 48 3                                                           
  7.     rgba 8/16,8/8,8/0,8/24                                                                  
  8. endmode      
Copy the Code
i create a directfbrc at /etc with the following content:
  1. mode=800x480
Copy the Code
for completeness the content of /sys/class/graphics/fb0/modes is:
  1. D:800x480p-65
Copy the Code
but i can launch any dfb application only by specifying a resolution of 640x480, e.g.
  1. bananapi@devpi1 ~/projects/sandbox/directfb_course/01_hello_world $ sudo dfbinfo -i --dfb:mode=640x480           
  2.                                                                                                                  
  3.    ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~                                       
  4.         (c) 2001-2008  The world wide DirectFB Open Source Community                                             
  5.         (c) 2000-2004  Convergence (integrated media) GmbH                                                      
  6.       ----------------------------------------------------------------                                          
  7.                                                                                                                  
  8. (*) DirectFB/Core: Single Application Core. (2012-06-01 00:48)                                                   
  9. (*) Direct/Thread: Started 'VT Switcher' (-1) [CRITICAL OTHER/OTHER 0/0] <8388608>...                           
  10. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                              
  11. (*) DirectFB/Input: sunxi-ir (1) 0.1 (directfb.org)                                                              
  12. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                              
  13. (*) DirectFB/Input: axp20-supplyer (2) 0.1 (directfb.org)                                                        
  14. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                              
  15. (*) DirectFB/Input: RPI_TOUCH By ZH851 (3) 0.1 (directfb.org)                                                   
  16. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                              
  17. (*) DirectFB/Input: NOVATEK USB Keyboard (4) 0.1 (directfb.org)                                                  
  18. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                              
  19. (*) DirectFB/Input: NOVATEK USB Keyboard (5) 0.1 (directfb.org)                                                  
  20. (*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                                
  21. (*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)                                                         
  22. (*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                                
  23. (*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)                                                         
  24. (*) Direct/Thread: Started 'Keyboard Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...                           
  25. (*) DirectFB/Input: Keyboard 0.9 (directfb.org)                                                                  
  26. (*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)                                            
  27. (*) DirectFB/Core/WM: Default 0.3 (directfb.org)                                                                 
  28. (*) FBDev/Surface: Allocated 640x480 32 bit LUT8 buffer (index 0) at offset 0 and pitch 3200.                    
  29. (*) FBDev/Mode: Setting 640x480 LUT8                                                                             
  30. (*) FBDev/Mode: Switched to 640x480 (virtual 640x480) at 8 bit (LUT8), pitch 3200                                
  31.                                                                                                                  
  32.                                                                                                                  
  33. Screen (00) FBDev Primary Screen            (primary screen)                                                     
  34.    Caps: VSYNC POWER_MANAGEMENT                                                                                 
  35.                                                                                                                  
  36.      Layer (00) FBDev Primary Layer             (primary layer)                                                  
  37.         Type:    GRAPHICS                                                                                       
  38.         Caps:    SURFACE BRIGHTNESS CONTRAST SATURATION                                                         
  39.                                                                                                                  
  40.                                                                                                                  
  41. Input (00) sunxi-ir                        (primary keyboard)                                                   
  42.    Type: KEYBOARD                                                                                                
  43.    Caps: KEYS                                                                                                   
  44.    Min. Keycode: 0                                                                                               
  45.    Max. Keycode: 127                                                                                             
  46.                                                                                                                  
  47. Input (10) axp20-supplyer                                                                                       
  48.    Type:                                                                                                         
  49.    Caps:                                                                                                         
  50.                                                                                                                  
  51. Input (01) RPI_TOUCH By ZH851              (primary mouse)                                                      
  52.    Type: MOUSE                                                                                                   
  53.    Caps: AXES                                                                                                   
  54.    Max. Axis: 1                                                                                                  
  55.                                                                                                                  
  56. Input (11) NOVATEK USB Keyboard                                                                                 
  57.    Type: KEYBOARD                                                                                                
  58.    Caps: KEYS                                                                                                   
  59.    Min. Keycode: 0                                                                                               
  60.    Max. Keycode: 127                                                                                             
  61.                                                                                                                  
  62. Input (12) NOVATEK USB Keyboard                                                                                 
  63.    Type:                                                                                                         
  64.    Caps: BUTTONS                                                                                                
  65.    Max. Button: 14                                                                                               
  66.                                                                                                                  
  67. Input (13) IMPS/2 Mouse                                                                                          
  68.    Type: MOUSE                                                                                                   
  69.    Caps: AXES BUTTONS                                                                                            
  70.    Max. Axis: 2                                                                                                  
  71.    Max. Button: 2                                                                                                
  72.                                                                                                                  
  73. Input (14) IMPS/2 Mouse                                                                                          
  74.    Type: MOUSE                                                                                                   
  75.    Caps: AXES BUTTONS                                                                                            
  76.    Max. Axis: 2                                                                                                  
  77.    Max. Button: 2                                                                                                
  78.                                                                                                                  
  79. Input (15) Keyboard                                                                                             
  80.    Type: KEYBOARD                                                                                                
  81.    Caps: KEYS                                                                                                   
  82.    Min. Keycode: 0                                                                                               
  83.    Max. Keycode: 127                                                     
Copy the Code
when i launch the simple program above with a resolution of 640x480 i got the following result:

index.jpg

if i try to exectue the application with the resolution of the display (800x480) i got the folloing output:
  1. bananapi@devpi1 ~/projects/sandbox/directfb_course/01_hello_world $ sudo ./hello

  2.    ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~
  3.         (c) 2001-2008  The world wide DirectFB Open Source Community
  4.         (c) 2000-2004  Convergence (integrated media) GmbH
  5.       ----------------------------------------------------------------

  6. (*) DirectFB/Core: Single Application Core. (2012-06-01 00:48)
  7. (*) Direct/Thread: Started 'VT Switcher' (-1) [CRITICAL OTHER/OTHER 0/0] <8388608>...
  8. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  9. (*) DirectFB/Input: sunxi-ir (1) 0.1 (directfb.org)
  10. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  11. (*) DirectFB/Input: axp20-supplyer (2) 0.1 (directfb.org)
  12. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  13. (*) DirectFB/Input: RPI_TOUCH By ZH851 (3) 0.1 (directfb.org)
  14. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  15. (*) DirectFB/Input: NOVATEK USB Keyboard (4) 0.1 (directfb.org)
  16. (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  17. (*) DirectFB/Input: NOVATEK USB Keyboard (5) 0.1 (directfb.org)
  18. (*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  19. (*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)
  20. (*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  21. (*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)
  22. (*) Direct/Thread: Started 'Keyboard Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
  23. (*) DirectFB/Input: Keyboard 0.9 (directfb.org)
  24. (*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
  25. (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
  26. (!) FBDev/Mode: No mode found for 800x480!
  27. (!) DirectFB/DirectFBCreate: Setting desktop resolution to 800x480 failed!
  28.      -> Using default resolution.
  29. (!) DirectFB/DirectFBCreate: Setting desktop format failed!
  30.      -> Using default format.
  31. (!) DirectFB/DirectFBCreate: Setting desktop buffer mode failed!
  32.      -> No virtual resolution support or not enough memory?
  33.         Falling back to system back buffer.
  34. (!) FBDev/Mode: No mode found for 800x480!
  35. (!) DirectFB/DirectFBCreate: Setting system memory desktop back buffer failed!
  36.      -> Using front buffer only mode.
  37. (!) FBDev/Mode: No mode found for 800x480!
  38. (!) DirectFB/core/layers: Could not set primary region config!
  39.     --> Not supported!
  40. (!) InitLayers: Could not get primary region of layer 0!
  41.     --> Not supported!
  42. dfb.c <26>:
  43.         (#) DirectFBError [DirectFBCreate (&dfb)]: Not supported!
  44. bananapi@devpi1 ~/projects/sandbox/directfb_course/01_hello_world $
Copy the Code
Its not possible for me to launch the application with the original display resolution.  I would be glad very much if you have any idea about next steps to turn my BP to show directfb in real full screen.

Marry Chrismas and thanks in advance
nukleo

Edited by destroyedlolo at Dec 26, 2015 16:55

Marry Chrismas as well

I think it's because you didn't specify the frequency "-p66".

But ... why are U forcing the screen resolution ?
For my own application, I keep directfb to find by itself the screen resolution and it choose the largest one (I didn't fill any /etc file or anything else).

And for example, on my A13 tablet, I got :
  1. dfbinfo
  2. (*) Direct/Thread: Started 'SigHandler' (26244) [CRITICAL - OTHER/0] <8388608>...

  3.    ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.6 |~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.         (c) 2012-2013  DirectFB integrated media GmbH
  5.         (c) 2001-2013  The world wide DirectFB Open Source Community
  6.         (c) 2000-2004  Convergence (integrated media) GmbH
  7.       ----------------------------------------------------------------

  8. (*) DirectFB/Core: Single Application Core. (2015-12-02 19:06)
  9. (*) Direct/Memcpy: Using armasm_memcpy()
  10. (*) Direct/Thread: Started 'Fusion Dispatch' (26245) [MESSAGING - OTHER/0] <8388608>...
  11. (*) Direct/Thread: Started 'VT Switcher' (26248) [CRITICAL - OTHER/0] <8388608>...
  12. (*) Direct/Thread: Started 'VT Flusher' (26249) [DEFAULT - OTHER/0] <8388608>...
  13. (*) DirectFB/FBDev: Found '' (ID 0) with frame buffer at 0x49001000, 3000k (MMIO 0x00000000, 0k)
  14. (*) Direct/Thread: Started 'Keyboard Input' (26250) [INPUT - OTHER/0] <8388608>...
  15. (*) DirectFB/Input: Keyboard 0.9 (directfb.org)
  16. (*) Direct/Thread: Started 'PS/2 Input' (26251) [INPUT - OTHER/0] <8388608>...
  17. (*) DirectFB/Input: IMPS/2 Mouse 1.0 (directfb.org)
  18. (*) Direct/Thread: Started 'Linux Input' (26252) [INPUT - OTHER/0] <8388608>...
  19. (*) DirectFB/Input: ft5x_ts 0.1 (directfb.org)
  20. (*) Direct/Thread: Started 'Hotplug with Linux Input' (26253) [INPUT - OTHER/0] <8388608>...
  21. (*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver
  22. (*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
  23. (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
  24. (*) Direct/Thread: Started 'Genefx' (26254) [DEFAULT - OTHER/0] <8388608>...
  25. (*) FBDev/Mode: Setting 800x480 RGB32
  26. (*) FBDev/Mode: Switched to 800x480 (virtual 800x480) at 32 bit (RGB32), pitch 3200


  27. Screen (00) FBDev Primary Screen            (primary screen)
  28.    Caps: VSYNC POWER_MANAGEMENT

  29.      Layer (00) FBDev Primary Layer             (primary layer)
  30.         Type:    GRAPHICS
  31.         Caps:    SURFACE BRIGHTNESS CONTRAST SATURATION


  32. Input (00) Keyboard                        (primary keyboard)
  33.    Vendor  ID: 0x0000
  34.    Product ID: 0x0000
  35.    Type: KEYBOARD
  36.    Caps: KEYS
  37.    Min. Keycode: 0
  38.    Max. Keycode: 127

  39. Input (01) IMPS/2 Mouse                    (primary mouse)
  40.    Vendor  ID: 0x0000
  41.    Product ID: 0x0000
  42.    Type: MOUSE
  43.    Caps: AXES BUTTONS
  44.    Max. Axis: 2
  45.    Max. Button: 2

  46. Input (10) ft5x_ts                       
  47.    Vendor  ID: 0x0000
  48.    Product ID: 0x0000
  49.    Type: MOUSE
  50.    Caps: AXES
  51.    Max. Axis: 1

  52. (!!!)  *** UNIMPLEMENTED [fusion_dispatch] *** [fusion.c:3937]
Copy the Code


and the same header when I'm running my application :
  1. ~/Projets/Selene $ ./Selene --dfb:no-vt Selenites/Lines.sel
  2. (*) Direct/Thread: Started 'SigHandler' (26301) [CRITICAL - OTHER/0] <8388608>...

  3.    ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.6 |~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.         (c) 2012-2013  DirectFB integrated media GmbH
  5.         (c) 2001-2013  The world wide DirectFB Open Source Community
  6.         (c) 2000-2004  Convergence (integrated media) GmbH
  7.       ----------------------------------------------------------------

  8. (*) DirectFB/Core: Single Application Core. (2015-12-02 19:06)
  9. (*) Direct/Memcpy: Using armasm_memcpy()
  10. (*) Direct/Thread: Started 'Fusion Dispatch' (26302) [MESSAGING - OTHER/0] <8388608>...
  11. (*) DirectFB/FBDev: Found '' (ID 0) with frame buffer at 0x49001000, 3000k (MMIO 0x00000000, 0k)
  12. (!) DirectFB/Keyboard: Could not open() /dev/tty0!
  13.     --> Permission denied
  14. (*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
  15. (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
  16. (*) Direct/Thread: Started 'Genefx' (26303) [DEFAULT - OTHER/0] <8388608>...
  17. (*) FBDev/Mode: Setting 800x480 RGB32
  18. (*) FBDev/Mode: Switched to 800x480 (virtual 800x480) at 32 bit (RGB32), pitch 3200
  19. (*) FBDev/Mode: Setting 800x480 RGB32
  20. (*) FBDev/Mode: Switched to 800x480 (virtual 800x480) at 32 bit (RGB32), pitch 3200
Copy the Code


As you can seen on my dashboard uses all the screen :

PS : anyway, if someone can help me to make the ft5x touchscreen to work, it would help me to make my dashboard more interactive
Meteo.png

This is the era of graphic programming all the big director of the movies are using the graphic to make the scene best. Graphic programming starts from best writing service review they gave the lecture that how we can make the graphic programmer.

Edited by milnerjames at Apr 04, 2019 03:24

[size=10.6667px]Banana pi graphics programming configuration seems to be one of the most used by the designers at various stages of programming. Actually i was looking to find some information about the same since i am a beginner in the field. engagement rings

I study Programming in university, and it's very interesting, but, at the same time, difficult. Because I have a lot of classes I don't have an opportunity to write all the assignments I get. That is why I order quality english essay, case studies, book reports etc. from Masterpapers. My orders always done on time and at the highest level.

You have to log in before you can reply Login | Sign Up

Points Rules