Advertisement
Guest User

AGG && SDL_Lock_texture

a guest
May 17th, 2015
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.32 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.     void *tex_pixels = NULL;
  67.     int tex_pitch = -1;
  68.    
  69.     SDL_Texture* tex = SDL_CreateTexture
  70.     (
  71.         ren,
  72.         SDL_PIXELFORMAT_RGBA8888,
  73.         SDL_TEXTUREACCESS_STREAMING,
  74.         frame_width,
  75.         frame_height
  76.     );
  77.            
  78.     SDL_LockTexture
  79.     (
  80.         tex,
  81.         NULL,
  82.         &tex_pixels,
  83.         &tex_pitch
  84.     );
  85.                        
  86.     agg::rendering_buffer rbuf //rendering buffer object
  87.     (
  88.         (unsigned char*)tex_pixels,
  89.         frame_width,
  90.         frame_height,
  91.         frame_width * 4
  92.     );
  93.    
  94.     AGG_RGBA32_BYTE_ORDER pixf(rbuf);
  95.     agg::renderer_base<AGG_RGBA32_BYTE_ORDER> rbase(pixf);
  96.         //clear tex_pixels
  97.     rbase.clear(agg::rgba8(0, 0, 255, 255));
  98.    
  99.     agg::scanline_u8 scanline;
  100.     agg::rasterizer_scanline_aa<> ras;
  101.    
  102.     agg::renderer_scanline_aa_solid
  103.     <
  104.         agg::renderer_base
  105.         <
  106.             AGG_RGBA32_BYTE_ORDER
  107.         >
  108.     > rscan(rbase);
  109.    
  110.     //create agg paths
  111.     agg::path_storage path;
  112.     path.move_to(10, 10);
  113.     path.line_to(frame_width-10, frame_height-10);
  114.     path.line_to(frame_width-10, 10);
  115.     path.line_to(10, frame_height-10);
  116.    
  117.     agg::conv_stroke<agg::path_storage> stroke(path);
  118.     stroke.width(8.2);
  119.     stroke.line_cap(agg::round_cap);
  120.     stroke.line_join(agg::round_join);
  121.     ras.add_path(stroke);
  122.     rscan.color(agg::rgba8(75, 150, 225, 255));
  123.    
  124.     //draw paths to tex_pixels
  125.     agg::render_scanlines(ras, scanline, rscan);
  126.  
  127.     //create more agg paths
  128.     path.remove_all();
  129.     path.line_to(frame_width-50, frame_height-50);
  130.     path.line_to(frame_width-50, 50);
  131.     path.line_to(50, frame_height-50);
  132.  
  133.     ras.add_path(stroke);
  134.    
  135.     rscan.color(agg::rgba8(200, 150, 50, 255));
  136.     agg::render_scanlines(ras, scanline, rscan);
  137.    
  138. //  SDL_UnlockSurface(surf);
  139.     SDL_UnlockTexture(tex);
  140.  
  141.     SDL_RenderCopy
  142.     (
  143.         ren,
  144.         tex,
  145.         NULL,
  146.         NULL
  147.     );
  148.     SDL_RenderPresent(ren);
  149.  
  150.     //main event loop
  151.     //---------------
  152.     SDL_Event e;
  153.     SDL_Point a, b;
  154.     while(1) //loop until user quits
  155.     {
  156.         if(SDL_PollEvent(&e))
  157.         {
  158.             switch(e.type)
  159.             {
  160.                 case SDL_QUIT:
  161.                     return 0;
  162.                
  163.                 case SDL_KEYDOWN:
  164.                     if(e.key.keysym.sym == SDLK_ESCAPE)
  165.                         return(0);
  166.                        
  167.                 case SDL_MOUSEBUTTONDOWN:
  168.                     if (e.button.button == SDL_BUTTON_LEFT)
  169.                     {
  170.                         SDL_GetMouseState(&a.x, &a.y);
  171.                         SDL_RenderDrawPoint(ren, a.x, a.y);
  172. //                      path.move_to(a.x, a.y);
  173.                     }
  174.                     break;
  175.                    
  176.                 case SDL_MOUSEMOTION:
  177.                     if(e.motion.state & SDL_BUTTON_LMASK)
  178.                     {
  179.                         SDL_GetMouseState(&b.x, &b.y);
  180.                         SDL_RenderDrawLine
  181.                         (
  182.                             ren,
  183.                             a.x,
  184.                             a.y,
  185.                             b.x,
  186.                             b.y
  187.                         );
  188.                        
  189.                         //SDL_LockSurface(surf);
  190.                         SDL_LockTexture
  191.                         (  
  192.                             tex,
  193.                             NULL,
  194.                             &tex_pixels,
  195.                             &tex_pitch
  196.                         );
  197.  
  198. /*                      path.line_to(b.x, b.y);
  199.  
  200.                         ras.add_path(stroke);  
  201.                         rscan.color(agg::rgba8(200, 150, 50, 255));
  202.                         agg::render_scanlines(ras, scanline, rscan);
  203.     */                 
  204. //                      SDL_UnlockSurface(surf);
  205.                         SDL_UnlockTexture(tex);
  206.                         tex_pixels = NULL;
  207.                         tex_pitch = -1;
  208.                         SDL_RenderCopy
  209.                         (
  210.                             ren,
  211.                             tex,
  212.                             NULL,
  213.                             NULL
  214.                         );
  215.                         SDL_RenderPresent(ren);
  216.                         a=b;
  217.                     }
  218.                     break;
  219.             }
  220.         }
  221.        
  222.  
  223.         SDL_Delay(100); //speedbump
  224.     }
  225.    
  226.     return 0;
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement