Advertisement
Guest User

AGG && SDL_Lock_texture

a guest
May 17th, 2015
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.22 KB | None | 0 0
  1. #include "SDL.h"
  2. #include "agg_renderer_base.h"
  3. #include "agg_pixfmt_rgba.h"
  4. #include "agg_scanline_u.h"
  5. #include "agg_rasterizer_scanline_aa.h"
  6. #include "agg_renderer_scanline.h"
  7. #include "agg_path_storage.h"
  8. #include "agg_conv_stroke.h"
  9.  
  10. enum
  11. {
  12.     frame_width = 800,
  13.     frame_height = 600
  14. };
  15.  
  16. int main(int argc, char * argv[])
  17. {
  18.     //initialize SDL
  19.     //--------------
  20.     atexit(SDL_Quit);
  21.     SDL_Init(SDL_INIT_VIDEO);
  22.     SDL_Window* win = SDL_CreateWindow
  23.     (
  24.         "SDL&AGG",
  25.         SDL_WINDOWPOS_CENTERED,
  26.         SDL_WINDOWPOS_CENTERED,
  27.         frame_width,
  28.         frame_height,
  29.         0
  30.     );
  31.     SDL_Renderer* ren = SDL_CreateRenderer
  32.     (
  33.         win,
  34.         -1,
  35.         0
  36.     );
  37.                        
  38.     //initialize AGG with memory allocated by SDL
  39.     #if SDL_BYTEORDER == SDL_BIG_ENDIAN
  40.     #define AGG_RGBA32_BYTE_ORDER agg::pixfmt_rgba32
  41.     #define RMASK 0xff000000
  42.     #define GMASK 0x00ff0000
  43.     #define BMASK 0x0000ff00
  44.     #define AMASK 0x000000ff
  45.     #else
  46.     #define AGG_RGBA32_BYTE_ORDER agg::pixfmt_abgr32
  47.     #define RMASK 0x000000ff
  48.     #define GMASK 0x0000ff00
  49.     #define BMASK 0x00ff0000
  50.     #define AMASK 0xff000000
  51.     #endif
  52.  
  53.     SDL_Surface* surf = SDL_CreateRGBSurface
  54.     (
  55.         0,
  56.         frame_width,
  57.         frame_height,
  58.         32,
  59.         RMASK,
  60.         GMASK,
  61.         BMASK,
  62.         AMASK
  63.     );
  64.    
  65.     SDL_LockSurface(surf);
  66.    
  67.     SDL_Texture* tex = SDL_CreateTexture
  68.     (
  69.         ren,
  70.         SDL_PIXELFORMAT_RGBA8888,
  71.         SDL_TEXTUREACCESS_STREAMING,
  72.         frame_width,
  73.         frame_height
  74.     );
  75.            
  76.     SDL_LockTexture
  77.     (
  78.         tex,
  79.         NULL,
  80.         &surf->pixels,
  81.         &surf->pitch
  82.     );
  83.                        
  84.     agg::rendering_buffer rbuf //rendering buffer object
  85.     (
  86.         (unsigned char*)surf->pixels,
  87.         frame_width,
  88.         frame_height,
  89.         frame_width * 4
  90.     );
  91.    
  92.     AGG_RGBA32_BYTE_ORDER pixf(rbuf);
  93.     agg::renderer_base<AGG_RGBA32_BYTE_ORDER> rbase(pixf);
  94.         //clear surf->pixels
  95.     rbase.clear(agg::rgba8(0, 0, 255, 255));
  96.    
  97.     agg::scanline_u8 scanline;
  98.     agg::rasterizer_scanline_aa<> ras;
  99.    
  100.     agg::renderer_scanline_aa_solid
  101.     <
  102.         agg::renderer_base
  103.         <
  104.             AGG_RGBA32_BYTE_ORDER
  105.         >
  106.     > rscan(rbase);
  107.    
  108.     //create agg paths
  109.     agg::path_storage path;
  110.     path.move_to(10, 10);
  111.     path.line_to(frame_width-10, frame_height-10);
  112.     path.line_to(frame_width-10, 10);
  113.     path.line_to(10, frame_height-10);
  114.    
  115.     agg::conv_stroke<agg::path_storage> stroke(path);
  116.     stroke.width(8.2);
  117.     stroke.line_cap(agg::round_cap);
  118.     stroke.line_join(agg::round_join);
  119.     ras.add_path(stroke);
  120.     rscan.color(agg::rgba8(75, 150, 225, 255));
  121.    
  122.     //draw paths to surf->pixels
  123.     agg::render_scanlines(ras, scanline, rscan);
  124.  
  125.     //create more agg paths
  126.     path.remove_all();
  127.     path.line_to(frame_width-50, frame_height-50);
  128.     path.line_to(frame_width-50, 50);
  129.     path.line_to(50, frame_height-50);
  130.  
  131.     ras.add_path(stroke);
  132.    
  133.     rscan.color(agg::rgba8(200, 150, 50, 255));
  134.     agg::render_scanlines(ras, scanline, rscan);
  135.    
  136.     SDL_UnlockSurface(surf);
  137.     SDL_UnlockTexture(tex);
  138.  
  139.     SDL_RenderCopy
  140.     (
  141.         ren,
  142.         tex,
  143.         NULL,
  144.         NULL
  145.     );
  146.     SDL_RenderPresent(ren);
  147.  
  148.     //main event loop
  149.     //---------------
  150.     SDL_Event e;
  151.     SDL_Point a, b;
  152.     while(1) //loop until user quits
  153.     {
  154.         if(SDL_PollEvent(&e))
  155.         {
  156.             switch(e.type)
  157.             {
  158.                 case SDL_QUIT:
  159.                     return 0;
  160.                
  161.                 case SDL_KEYDOWN:
  162.                     if(e.key.keysym.sym == SDLK_ESCAPE)
  163.                         return(0);
  164.                        
  165.                 case SDL_MOUSEBUTTONDOWN:
  166.                     if (e.button.button == SDL_BUTTON_LEFT)
  167.                     {
  168.                         SDL_GetMouseState(&a.x, &a.y);
  169.                         SDL_RenderDrawPoint(ren, a.x, a.y);
  170. //                      path.move_to(a.x, a.y);
  171.                     }
  172.                     break;
  173.                    
  174.                 case SDL_MOUSEMOTION:
  175.                     if(e.motion.state & SDL_BUTTON_LMASK)
  176.                     {
  177.                         SDL_GetMouseState(&b.x, &b.y);
  178.                         SDL_RenderDrawLine
  179.                         (
  180.                             ren,
  181.                             a.x,
  182.                             a.y,
  183.                             b.x,
  184.                             b.y
  185.                         );
  186.                        
  187.                         SDL_LockSurface(surf);
  188.                         SDL_LockTexture
  189.                         (  
  190.                             tex,
  191.                             NULL,
  192.                             &surf->pixels,
  193.                             &surf->pitch
  194.                         );
  195.  
  196. /*                      path.line_to(b.x, b.y);
  197.  
  198.                         ras.add_path(stroke);  
  199.                         rscan.color(agg::rgba8(200, 150, 50, 255));
  200.                         agg::render_scanlines(ras, scanline, rscan);
  201.     */                 
  202.                         SDL_UnlockSurface(surf);
  203.                         SDL_UnlockTexture(tex);
  204.                         SDL_RenderCopy
  205.                         (
  206.                             ren,
  207.                             tex,
  208.                             NULL,
  209.                             NULL
  210.                         );
  211.                         SDL_RenderPresent(ren);
  212.                         a=b;
  213.                     }
  214.                     break;
  215.             }
  216.         }
  217.        
  218.  
  219.         SDL_Delay(250); //speedbump
  220.     }
  221.    
  222.     return 0;
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement