Results 1 to 7 of 7

Thread: Opengl and scalable vector graphics (svg)

  1. #1

    Opengl and scalable vector graphics (svg)

    Hi everyone

    Does anyone have or know if a good implementation fo svg which targets opengl. I have seen sdl_svg but that is limited to rendering to sdl surfaces.

    I had a think about this and svg looks like a good way to get really nice gui's in games, it's vector based to will scale easily and has script elements to embed api calls to a scripting system to handle button clicks etc.

    Anyway, if anyone know's of any good libraries (c++ or oop) let me know

    Dean
    <A HREF="http://www.myhpf.co.uk/banner.asp?friend=139328">
    <br /><IMG SRC="http://www.myhpf.co.uk/banners/60x468.gif" BORDER="0">
    <br /></A>

  2. #2

    Opengl and scalable vector graphics (svg)

    All that needs to be done is translate the basic objects of svg into opengl calls and you are done, the bad part is that that is a lot of work.

    Here is a starter ( i stopped because of lack of time, but feel free to continue it under the license used for amaya, wich a kind of bsd license, as that is where most source comes from translated from c to pascal)

    Code:
    unit dglSvg;
    
    interface
    
    procedure GL_SetForeground &#40;fg&#58; integer&#41;;
    procedure GL_SetPicForeground &#40;&#41;;
    procedure InitDrawing &#40;style&#58; integer; thick&#58; integer; fg&#58; integer&#41;;
    procedure GL_VideoInvert &#40;width&#58; integer; height&#58; integer; x&#58; integer; y&#58; integer&#41;;
    procedure GL_DrawEmptyRectangle &#40;fg&#58; integer; x&#58; single; y&#58; single; width&#58; single; height&#58; single; thick&#58; single&#41;;
    procedure GL_DrawRectangle &#40;fg&#58; integer; x&#58; single; y&#58; single; width&#58; single; height&#58; single&#41;;
    procedure GL_DrawLine &#40;x1&#58; integer; y1&#58; integer; x2&#58; integer; y2&#58; integer; round&#58; boolean&#41;;
    
    procedure GL_DrawArc &#40;x&#58; single; y&#58; single; w&#58; single; h&#58; single; startAngle&#58; integer; sweepAngle&#58; integer; filled&#58; boolean&#41;;
    
    procedure DrawOval &#40;frame&#58; integer; thick&#58; integer; style&#58; integer; x&#58; integer; y&#58; integer; width&#58; integer;
                   height&#58; integer; rx&#58; integer; ry&#58; integer; fg&#58; integer; bg&#58; integer; pattern&#58; integer&#41;;
    
    implementation
    
    uses dglOpenGL;
    
    const
      M_PI = 3.14159265358979323846;
      CSLICES = 360;
      SLICES_SIZE = 361;
    
    
    var
     S_thick&#58; integer;
     Opacity&#58; GLubyte = 255;
     FillOpacity&#58; GLubyte = 255;
     StrokeOpacity&#58; GLubyte = 255;
     Fill_style&#58; boolean = TRUE;
     X_Clip&#58; integer = 0;
     Y_Clip&#58; integer = 0;
     Width_Clip&#58; integer = 0;
     Height_Clip&#58; integer = 0;
    
    
    &#40;*----------------------------------------------------------------------
      GL_SetForeground &#58; set color before drawing a or many vertex
      ----------------------------------------------------------------------*&#41;
    procedure GL_SetForeground &#40;fg&#58; integer&#41;;
    var
      red, green, blue&#58; byte;
      us_opac&#58; GLubyte;
    begin
      if &#40;Fill_style&#41; then
        us_opac &#58;= FillOpacity
      else
        begin
          us_opac &#58;= StrokeOpacity;
          Fill_style &#58;= TRUE;
        end;
    //  TtaGiveThotRGB &#40;fg, &red, &green, &blue&#41;;
      red&#58;=0;
      green&#58;=0;
      blue&#58;=255;
    
      glColor4ub &#40; GLubyte&#40; red &#41;,  GLubyte&#40; green &#41;, GLubyte &#40; blue &#41;,  us_opac &#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_SetPicForeground &#58; set opacity before drawing a or many vertex
      ----------------------------------------------------------------------*&#41;
    procedure GL_SetPicForeground &#40;&#41;;
    var
      us_opac&#58; GLubyte;
    begin
      us_opac &#58;= FillOpacity;
      glColor4ub &#40; 255, 255, 255, us_opac&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      InitDrawing update the Graphic Context accordingly to parameters.
      The parameter fg indicates the drawing color
      ----------------------------------------------------------------------*&#41;
    procedure InitDrawing &#40;style&#58; integer; thick&#58; integer; fg&#58; integer&#41;;
    begin
      if &#40;style >= 5&#41; then
        begin
          // solid
          if &#40;thick>0&#41; then
            begin
              S_thick &#58;= thick;
              glLineWidth &#40; thick &#41;;
              glPointSize &#40; thick &#41;;
            end
          else
            begin
              glLineWidth &#40; 0.5 &#41;;
              glPointSize &#40; 0.5 &#41;;
            end;
          glDisable &#40;GL_LINE_STIPPLE&#41;;
        end
      else
        begin
          if &#40;thick>0&#41; then
            begin
              S_thick &#58;= thick;
              if &#40;style = 3&#41; then
                begin
                  // dotted
                  glLineStipple &#40;thick, $5555&#41;;
                  glEnable &#40;GL_LINE_STIPPLE&#41;;
                end
              else
                begin
                  // dashed
                  glLineStipple &#40;thick, $1F1F&#41;;
                  glEnable &#40;GL_LINE_STIPPLE&#41;;
                end;
              glLineWidth &#40; thick &#41;;
              glPointSize &#40; thick &#41;;
            end
          else
            begin
              glLineWidth &#40; 0.5 &#41;;
              glPointSize &#40; 0.5 &#41;;
            end;
    
        end;
      Fill_style &#58;= FALSE;
      GL_SetForeground &#40;fg&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_VideoInvert &#58;
      using a transparent yellow instead of inverting... much simpler !
      ----------------------------------------------------------------------*&#41;
    procedure GL_VideoInvert &#40;width&#58; integer; height&#58; integer; x&#58; integer; y&#58; integer&#41;;
    begin
      &#40;*a blend func like that could be coool ?
        &#40;GL_ONE_MINUS_DST_COLOR,GL_ZERO&#41; *&#41;
      glColor4ub &#40;127, 127, 127, 80&#41;;
      glBegin &#40;GL_QUADS&#41;;
      glVertex2i &#40;x, y&#41;;
      glVertex2i &#40;x + width, y&#41;;
      glVertex2i &#40;x +  width, y + height&#41;;
      glVertex2i &#40;x, y + height&#41;;
      glEnd &#40;&#41;;
    end;
    
    
    &#40;*----------------------------------------------------------------------
      GL_DrawEmptyRectangle Outlined rectangle
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawEmptyRectangle &#40;fg&#58; integer; x&#58; single; y&#58; single; width&#58; single; height&#58; single; thick&#58; single&#41;;
    begin
      GL_SetForeground &#40;fg&#41;;
      if &#40;&#40;thick - 1&#41;=0&#41; then
        begin
          glBegin &#40;GL_LINE_LOOP&#41;;
          glVertex2f &#40;x, y &#41;;
          glVertex2f &#40;x + width, y&#41;;
          glVertex2f &#40;x +  width, y + height&#41;;
          glVertex2f &#40;x, y + height&#41;;
        end
      else
        begin
          thick &#58;= thick / 2;
          glBegin &#40;GL_QUADS&#41;;
    
          glVertex2f &#40;x - thick, y - thick&#41;;
          glVertex2f &#40;x + thick + width, y - thick&#41;;
          glVertex2f &#40;x + thick + width, y + thick&#41;;
          glVertex2f &#40;x - thick, y + thick&#41;;
    
          glVertex2f &#40;x - thick, y - thick + height&#41;;
          glVertex2f &#40;x + thick + width, y - thick + height&#41;;
          glVertex2f &#40;x + thick + width, y + thick + height&#41;;
          glVertex2f &#40;x - thick, y + thick + height&#41;;
    
          glVertex2f &#40;x - thick, y - thick&#41;;
          glVertex2f &#40;x + thick, y - thick&#41;;
          glVertex2f &#40;x + thick, y + thick + height&#41;;
          glVertex2f &#40;x - thick, y + thick + height&#41;;
    
          glVertex2f &#40;x - thick + width, y - thick&#41;;
          glVertex2f &#40;x + thick + width, y - thick&#41;;
          glVertex2f &#40;x + thick + width, y + thick + height&#41;;
          glVertex2f &#40;x - thick + width, y + thick + height&#41;;
        end;
      glEnd &#40;&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_DrawRectangle
      &#40;don't use glrect because it's exactly the same but require opengl 1.2&#41;
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawRectangle &#40;fg&#58; integer; x&#58; single; y&#58; single; width&#58; single; height&#58; single&#41;;
    begin
      GL_SetForeground &#40;fg&#41;;
      glBegin &#40;GL_QUADS&#41;;
      glVertex2f &#40;x, y&#41;;
      glVertex2f &#40;x + width, y&#41;;
      glVertex2f &#40;x +  width, y + height&#41;;
      glVertex2f &#40;x, y + height&#41;;
      glEnd &#40;&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_DrawLine
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawLine &#40;x1&#58; integer; y1&#58; integer; x2&#58; integer; y2&#58; integer; round&#58; boolean&#41;;
    begin
      if &#40; &#40;S_thick > 1&#41; AND round&#41; then
        begin
          // round line join
          glBegin &#40;GL_POINTS&#41;;
          glVertex2i &#40;x1, y1&#41;;
          glVertex2i &#40;x2, y2&#41;;
          glEnd &#40;&#41;;
        end;
      glBegin &#40;GL_LINES&#41; ;
      glVertex2i &#40;x1, y1&#41;;
      glVertex2i &#40;x2, y2&#41;;
      glEnd &#40;&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_DrawArc &#58; Draw an arc
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawArc &#40;x&#58; single; y&#58; single; w&#58; single; h&#58; single; startAngle&#58; integer; sweepAngle&#58; integer; filled&#58; boolean&#41;;
    var
      i, slices&#58; GLint;
      angleOffset&#58; single;
      sinCache&#58; array&#91;0..SLICES_SIZE&#93; of single;
      cosCache&#58; array&#91;0..SLICES_SIZE&#93; of single;
      y_cache&#58; array&#91;0..SLICES_SIZE&#93; of single;
      x_cache&#58; array&#91;0..SLICES_SIZE&#93; of single;
      angle&#58; single;
      fastx, fasty, width, height&#58; single;
    begin
    
    
      width  &#58;= &#40;w&#41; / 2;
      height &#58;= &#40;h&#41; / 2;
      fastx  &#58;= &#40;x&#41; + width;
      fasty  &#58;= &#40;y&#41; + height;
      if &#40;w < 10&#41; AND &#40;h < 10&#41; then
        begin
          glPointSize &#40; 0.1 &#41;;
          slices &#58;= 36;
        end
      else
        slices &#58;= CSLICES;
    
      startAngle &#58;= startAngle;
      sweepAngle &#58;= sweepAngle;
    
      // Cache is the vertex locations cache
      angleOffset &#58;= &#40;startAngle / 180.0 * M_PI&#41;;
      for i &#58;= 0 to slices do
        begin
          angle &#58;= angleOffset + &#40;&#40;M_PI * sweepAngle&#41; / 180.0&#41; * i / slices;
          cosCache&#91;i&#93; &#58;= COS&#40;angle&#41;;
          sinCache&#91;i&#93; &#58;= SIN&#40;angle&#41;;
        end;
    
      if &#40;abs &#40;sweepAngle - 360.0&#41; < 0.0001&#41; then
        begin
          sinCache&#91;slices&#93; &#58;= sinCache&#91;0&#93;;
          cosCache&#91;slices&#93; &#58;= cosCache&#91;0&#93;;
        end;
    
      for i &#58;= 0 to slices do
        begin
          x_cache&#91;i&#93; &#58;= fastx + &#40;width * cosCache&#91;i&#93;&#41;;
          y_cache&#91;i&#93; &#58;= fasty - &#40;height * sinCache&#91;i&#93;&#41;;
        end;
    
      if &#40;filled&#41; then
        begin
          glBegin &#40;GL_TRIANGLE_FAN&#41;;
          // The center
          glVertex2d &#40;fastx, fasty&#41;;
          for i &#58;= 0 to slices do
            glVertex2d &#40;x_cache&#91;i&#93;, y_cache&#91;i&#93;&#41;;
          glEnd&#40;&#41;;
        end;
    
      if &#40;filled=FALSE&#41; then
        begin
          if &#40;w < 20&#41; AND &#40;h < 20&#41; then
            glBegin&#40;GL_POINTS&#41;
          else
            glBegin&#40;GL_LINE_STRIP&#41;;
    
          slices &#58;= slices -1;
          for i &#58;= 0 to slices do
            glVertex2d &#40;x_cache&#91;i&#93;, y_cache&#91;i&#93;&#41;;
    
          glEnd&#40;&#41;;
        end;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_Point &#58;
      Draw a point using GL primitives
      ----------------------------------------------------------------------*&#41;
    procedure GL_Point &#40;fg&#58; integer; width&#58; single; x&#58; single; y&#58;single&#41;;
    begin
      GL_SetForeground &#40;fg&#41;;
      glPointSize &#40;width&#41;;
      glBegin &#40;GL_POINTS&#41;;
      glVertex2f &#40;x, y&#41;;
      glEnd &#40;&#41;;
    end;
    
    type tarc = record
      width&#58; integer;
      height&#58; integer;
      x&#58; integer;
      y&#58; integer;
      angle1&#58; integer;
      angle2&#58; integer;
    end;
    
    tseg = record
      x1&#58; integer;
      x2&#58; integer;
      y1&#58; integer;
      y2&#58; integer;
    end;
    
    tpoint = record
      x&#58; integer;
      y&#58; integer;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_DrawSegments
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawSegments &#40;var point&#58; array of tseg; npoints&#58; integer&#41;;
    var
      i&#58; integer;
    begin
    
      if &#40;S_thick > 1&#41; then
        begin
          glBegin &#40;GL_POINTS&#41;;
          for i&#58;=0 to npoints-1 do
            begin
              glVertex2f &#40; point&#91;i&#93;.x1 ,
                          point&#91;i&#93;.y1 &#41;;
              glVertex2f &#40;point&#91;i&#93;.x2 ,
                          point&#91;i&#93;.y2 &#41;;
            end;
          glEnd &#40;&#41;;
        end;
      glBegin &#40;GL_LINES&#41; ;
      for i&#58;=0 to npoints-1 do
        begin
          glVertex2f &#40; point&#91;i&#93;.x1 ,
                      point&#91;i&#93;.y1&#41;;
          glVertex2f &#40; point&#91;i&#93;.x2 ,
                      point&#91;i&#93;.y2&#41;;
        end;
      glEnd &#40;&#41;;
    end;
    
    &#40;*----------------------------------------------------------------------
      GL_DrawPolygon &#58; tesselation handles
      convex, concave and polygon with holes
      ----------------------------------------------------------------------*&#41;
    procedure GL_DrawPolygon &#40;var points&#58; array of tpoint; npoints&#58; integer&#41;;
    begin
      //MakefloatMesh &#40;points, npoints&#41;;
    end;
    
    
    &#40;*----------------------------------------------------------------------
      DrawOval draw a rectangle with rounded corners.
      Parameters fg, bg, and pattern are for drawing
      color, background color and fill pattern.
      ----------------------------------------------------------------------*&#41;
    procedure DrawOval &#40;frame&#58; integer; thick&#58; integer; style&#58; integer; x&#58; integer; y&#58; integer; width&#58; integer;
                   height&#58; integer; rx&#58; integer; ry&#58; integer; fg&#58; integer; bg&#58; integer; pattern&#58; integer&#41;;
    var
      i&#58; integer;
      arc, dx, dy&#58; integer;
      xf, yf&#58; integer;
      xarc&#58; array&#91;0..4&#93; of tarc;
      seg&#58; array&#91;0..4&#93; of tseg;
      point&#58; array&#91;0..13&#93; of tpoint;
    begin
    
    
       //width &#58;= width - thick;
       //height &#58;= height - thick;
       //x &#58;= x+thick div 2;
       //y &#58;= y+thick div 2;
    
      y &#58;= y; //+FrameTable&#91;frame&#93;.FrTopMargin;
    
      // radius of arcs
      if &#40;rx = 0&#41; AND &#40;ry <> 0&#41; then
        rx &#58;= ry
      else if &#40;ry = 0&#41; AND &#40;rx <> 0&#41; then
        ry &#58;= rx;
      arc &#58;= width div 2;
      if &#40;rx > arc&#41; then
        rx &#58;= arc;
      arc &#58;= height div 2;
      if &#40;ry > arc&#41; then
        ry &#58;= arc;
      dx &#58;= rx;
      dy &#58;= ry;
      rx &#58;= rx * 2;
      ry &#58;= ry * 2;
      xf &#58;= x + width - 1;
      yf &#58;= y + height - 1;
    
      xarc&#91;0&#93;.x &#58;= x;
      xarc&#91;0&#93;.y &#58;= y;
      xarc&#91;0&#93;.width &#58;= rx;
      xarc&#91;0&#93;.height &#58;= ry;
      xarc&#91;0&#93;.angle1 &#58;= 90;
      xarc&#91;0&#93;.angle2 &#58;= 90;
    
      xarc&#91;1&#93;.x &#58;= xf - rx;
      xarc&#91;1&#93;.y &#58;= xarc&#91;0&#93;.y;
      xarc&#91;1&#93;.width &#58;= rx;
      xarc&#91;1&#93;.height &#58;= ry;
      xarc&#91;1&#93;.angle1 &#58;= 0;
      xarc&#91;1&#93;.angle2 &#58;= xarc&#91;0&#93;.angle2;
    
      xarc&#91;2&#93;.x &#58;= xarc&#91;0&#93;.x;
      xarc&#91;2&#93;.y &#58;= yf - ry;
      xarc&#91;2&#93;.width &#58;= rx;
      xarc&#91;2&#93;.height &#58;= ry;
      xarc&#91;2&#93;.angle1 &#58;= 180;
      xarc&#91;2&#93;.angle2 &#58;= xarc&#91;0&#93;.angle2;
    
      xarc&#91;3&#93;.x &#58;= xarc&#91;1&#93;.x;
      xarc&#91;3&#93;.y &#58;= xarc&#91;2&#93;.y;
      xarc&#91;3&#93;.width &#58;= rx;
      xarc&#91;3&#93;.height &#58;= ry;
      xarc&#91;3&#93;.angle1 &#58;= 270;
      xarc&#91;3&#93;.angle2 &#58;= xarc&#91;0&#93;.angle2;
    
      seg&#91;0&#93;.x1 &#58;= x + dx;
      seg&#91;0&#93;.x2 &#58;= xf - dx;
      seg&#91;0&#93;.y1 &#58;= y;
      seg&#91;0&#93;.y2 &#58;= seg&#91;0&#93;.y1;
    
      seg&#91;1&#93;.x1 &#58;= xf;
      seg&#91;1&#93;.x2 &#58;= seg&#91;1&#93;.x1;
      seg&#91;1&#93;.y1 &#58;= y + dy;
      seg&#91;1&#93;.y2 &#58;= yf - dy;
    
      seg&#91;2&#93;.x1 &#58;= seg&#91;0&#93;.x1;
      seg&#91;2&#93;.x2 &#58;= seg&#91;0&#93;.x2;
      seg&#91;2&#93;.y1 &#58;= yf;
      seg&#91;2&#93;.y2 &#58;= seg&#91;2&#93;.y1;
    
      seg&#91;3&#93;.x1 &#58;= x;
      seg&#91;3&#93;.x2 &#58;= seg&#91;3&#93;.x1;
      seg&#91;3&#93;.y1 &#58;= seg&#91;1&#93;.y1;
      seg&#91;3&#93;.y2 &#58;= seg&#91;1&#93;.y2;
    
      // Fill in the figure
      if &#40;pattern = 2&#41; then
        begin
          // Polygone inscrit&#58; &#40;seg0&#41;
          //                   0--1
          //                10-|  |-3
          //         &#40;seg3&#41; |       |&#40;seg1&#41;
          //                9--|  |-4
          //                   7--6
          //                   &#40;seg2&#41;
          point&#91;0&#93;.x &#58;= seg&#91;0&#93;.x1;
          point&#91;0&#93;.y &#58;= seg&#91;0&#93;.y1;
    
          point&#91;1&#93;.x &#58;= seg&#91;0&#93;.x2;
          point&#91;1&#93;.y &#58;= point&#91;0&#93;.y;
          point&#91;2&#93;.x &#58;= point&#91;1&#93;.x;
          point&#91;2&#93;.y &#58;= seg&#91;1&#93;.y1;
    
          point&#91;3&#93;.x &#58;= seg&#91;1&#93;.x1;
          point&#91;3&#93;.y &#58;= point&#91;2&#93;.y;
          point&#91;4&#93;.x &#58;= point&#91;3&#93;.x;
          point&#91;4&#93;.y &#58;= seg&#91;1&#93;.y2;
    
          point&#91;5&#93;.x &#58;= seg&#91;2&#93;.x2;
          point&#91;5&#93;.y &#58;= point&#91;4&#93;.y;
          point&#91;6&#93;.x &#58;= point&#91;5&#93;.x;
          point&#91;6&#93;.y &#58;= seg&#91;2&#93;.y2;
    
          point&#91;7&#93;.x &#58;= seg&#91;2&#93;.x1;
          point&#91;7&#93;.y &#58;= point&#91;6&#93;.y;
          point&#91;8&#93;.x &#58;= point&#91;7&#93;.x;
          point&#91;8&#93;.y &#58;= seg&#91;3&#93;.y2;
    
          point&#91;9&#93;.x &#58;= seg&#91;3&#93;.x2;
          point&#91;9&#93;.y &#58;= point&#91;8&#93;.y;
          point&#91;10&#93;.x &#58;= point&#91;9&#93;.x;
          point&#91;10&#93;.y &#58;= seg&#91;3&#93;.y1;
    
          point&#91;11&#93;.x &#58;= point&#91;0&#93;.x;
          point&#91;11&#93;.y &#58;= point&#91;10&#93;.y;
          point&#91;12&#93;.x &#58;= point&#91;0&#93;.x;
          point&#91;12&#93;.y &#58;= point&#91;0&#93;.y;
    
          GL_SetForeground &#40;bg&#41;;
    
          GL_DrawPolygon &#40;point, 13&#41;; //not implemented yet
    
          for i&#58;=0 to 3 do
            begin
              GL_DrawArc &#40;xarc&#91;i&#93;.x + thick/4, xarc&#91;i&#93;.y + thick/4,
                          xarc&#91;i&#93;.width - thick/4, xarc&#91;i&#93;.height-thick/4,
                          xarc&#91;i&#93;.angle1, xarc&#91;i&#93;.angle2,
                          TRUE&#41;;
            end;
        end;
    
    
      // Draw the border
      if &#40;thick > 0&#41; AND &#40;fg >= 0&#41; then
        begin
          InitDrawing &#40;style, thick, fg&#41;;
          for i&#58;=0 to 3 do
            GL_DrawArc &#40;xarc&#91;i&#93;.x, xarc&#91;i&#93;.y,
                        xarc&#91;i&#93;.width, xarc&#91;i&#93;.height,
                        xarc&#91;i&#93;.angle1, xarc&#91;i&#93;.angle2,
                        FALSE&#41;;
          //GL_DrawSegments &#40;seg, 4&#41;;
        end;
    end;
    
    end.
    http://3das.noeska.com - create adventure games without programming

  3. #3

    Opengl and scalable vector graphics (svg)

    Hi Noeska

    Thanks for posting the code you have. I had a funny feeling it was going to be a write your own job

    I'll have a look at your code, do you remember the c source of this :?:

    Dean
    <A HREF="http://www.myhpf.co.uk/banner.asp?friend=139328">
    <br /><IMG SRC="http://www.myhpf.co.uk/banners/60x468.gif" BORDER="0">
    <br /></A>

  4. #4

    Opengl and scalable vector graphics (svg)

    http://3das.noeska.com - create adventure games without programming

  5. #5

    Thumbs up LibRsvg + Cairo headers binding for the Free Pascal Compiler aka FPC

    You can take a look at LibRsvg + Cairo:

    https://github.com/DJMaster/librsvg-fpc
    https://github.com/DJMaster/cairo-fpc

    Strongly tested under Windows. Other OSs will be available soon.



  6. #6
    PGD Staff / News Reporter phibermon's Avatar
    Join Date
    Sep 2009
    Location
    England
    Posts
    524
    Been through your header collection - very comprehensive and useful! thanks very much for sharing your work
    When the moon hits your eye like a big pizza pie - that's an extinction level impact event.

  7. #7
    Thank you phibermon for your comment, really appreciated!


    Quote Originally Posted by phibermon View Post
    Been through your header collection - very comprehensive and useful! thanks very much for sharing your work

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Comodo SSL