Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - caracal

Pages: [1] 2
1
You should put this on the SFML wiki. And maybe even tidy up your overall code style (comments, code indenting, commented code, ect)  ;)

I plan on it, this was a quick post just to get the example online so it doesn't get lost.

I am going to modify the example with the following snippet I wrote in order to do away with the "Ogre Config Dialog"

#if defined OIS_LINUX_PLATFORM
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_ParticleFX");
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_CgProgramManager");
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_OctreeSceneManager");
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_PCZSceneManager");
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_OctreeZone");
  mRoot->loadPlugin("/usr/lib/OGRE/Plugin_BSPSceneManager");
  mRoot->loadPlugin("/usr/lib/OGRE/RenderSystem_GL");
  #endif

  Ogre::RenderSystemList::const_iterator renderers = mRoot->getAvailableRenderers().begin();

  while(renderers != mRoot->getAvailableRenderers().end())
  {
    Ogre::String rName = (*renderers)->getName();

    if (rName == "OpenGL Rendering Subsystem")
      break;

    renderers++;
  }

  Ogre::RenderSystem *renderSystem = *renderers;
  renderSystem->setConfigOption("Full Screen","No");
  renderSystem->setConfigOption("Video Mode","1024 x 768 @ 32-bit colour");
  renderSystem->setConfigOption("Display Frequency","50 Hz");
  renderSystem->setConfigOption("FSAA","16");
  renderSystem->setConfigOption("Fixed Pipeline Enabled","Yes");
  renderSystem->setConfigOption("RTT Preferred Mode","FBO");
  renderSystem->setConfigOption("VSync","No");
  renderSystem->setConfigOption("sRGB Gamma Conversion","No");

  mRoot->setRenderSystem(renderSystem);

  // Create a render window
  mWindow =  mRoot->initialise(true, "MyGame v0.0.1");
 

2
Here is an example on how to use SFML v2.1 for Window, Input, ... for Ogre v1.9
Note: Currently this only works on linux,  changes to this line of code maybe required for other platforms. "misc["currentGLContext"] = Ogre::String("true");"

Performance appears to be very good.

I tried briefly to draw 2D Graphics via SFML but I wasn't able to get anything to show-up, I will have to look further into it. 

The SFML related code is actually very short and simple, I did however provide a full Ogre example with a frame-listener, etc. But 99% of the provided code in the example isn't needed.

Thanks to this Ogre/GLFW Example http://www.ogre3d.org/forums/viewtopic.php?f=2&t=69853 I was able to get this working.

I hope you find this useful.



// g++ main.cpp -o main `pkg-config --libs --cflags OGRE` -lsfml-window -lsfml-graphics -lsfml-system -lGL

// SFML v2.1 Includes
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>

// Ogre v1.9 Includes
#include <Ogre.h>
#include <OgreFrameListener.h>

using namespace Ogre;
     
//
class MyFrameListener : public Ogre::FrameListener {
public:
  bool frameStarted (const FrameEvent &evt);
  bool frameEnded   (const FrameEvent &evt);
  bool frameRenderingQueued  (const FrameEvent &evt);
};
     
//
bool MyFrameListener::frameStarted(const FrameEvent &evt) {
  //std::cout << "Frame Started" << std::endl;
  return true;
}
     
//
bool MyFrameListener::frameEnded(const FrameEvent &evt) {
  //std::cout << "Frame Ended" << std::endl;
  return true;
}
     
//
bool MyFrameListener::frameRenderingQueued(const FrameEvent &evt) {
  //std::cout << "Frame Queued" << std::endl;
  return true;
}

int main()
{
  // create the window
  sf::RenderWindow window(sf::VideoMode(800, 600), "Ogre3D v1.9 and SFML v2.1", sf::Style::Default, sf::ContextSettings(32));
 
  // Create an instance of the OGRE Root Class
  Ogre::Root* ogreRoot = new Ogre::Root;
 
  // Configures the application
  if (!ogreRoot->restoreConfig())
    ogreRoot->showConfigDialog();
    ogreRoot->saveConfig();
 
  // Create Rendering System, but don't initialise it.
  ogreRoot->setRenderSystem(ogreRoot->getAvailableRenderers()[0]);
  ogreRoot->initialise(false);
 
  //
  Ogre::NameValuePairList misc;
  misc["currentGLContext"] = Ogre::String("true");
 
  // Create a render window | Note: Window Title and Size are not important here.
  Ogre::RenderWindow* ogreWindow = ogreRoot->createRenderWindow("Ogre Window", 800, 600, false, &misc);
  ogreWindow->setVisible(true);
 
  // Create Render Target
  Ogre::RenderTarget *ogreRenderTarget = ogreWindow;

  // Create Scene Manager
  Ogre::SceneManager* ogreSceneMgr = ogreRoot->createSceneManager(Ogre::ST_GENERIC);

  // Create a new camera
  Ogre::Camera* ogreCamera = ogreSceneMgr->createCamera("Camer0");
  ogreCamera->setPosition(Ogre::Vector3(0,0,10));
  ogreCamera->lookAt(Ogre::Vector3(0,0,-300));
  ogreCamera->setNearClipDistance(5);

  // Create OGRE Viewport and Set Background Colour
  Ogre::Viewport* vp = ogreWindow->addViewport(ogreCamera);
  vp->setBackgroundColour(Ogre::ColourValue(0,0,0));

  // Use the viewport to set the aspect ratio of the camera
  ogreCamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));
 
  // Add our model to our resources and index it
  Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/packs/Sinbad.zip", "Zip");
  Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/models/", "FileSystem");
  Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
 
  // Set Scene Ambient Light.
  ogreSceneMgr->setAmbientLight(Ogre::ColourValue(0.5f, 0.5f, 0.5f));
 
  // Create a new light.
  Ogre::Light* light = ogreSceneMgr->createLight("Light0");
  light->setPosition(20.0f, 80.0f, 50.0f);

  // Create an instance of our model and add it to the scene
  Ogre::Entity* ent = ogreSceneMgr->createEntity("Sinbad.mesh");
  Ogre::SceneNode* entNode = ogreSceneMgr->createSceneNode("Character0");
  entNode->attachObject(ent);
  ogreSceneMgr->getRootSceneNode()->addChild(entNode);
  entNode->setPosition(0,0,0);
 
  // Create an instance of the MyFrameListener Class and add it to the root object
  MyFrameListener* myListener = new MyFrameListener();
  ogreRoot->addFrameListener(myListener);

  // run the main loop
  bool running = true;
  while (running)
  {
    //Ogre::WindowEventUtilities::messagePump();
   
    // handle events
    sf::Event event;
    while (window.pollEvent(event))
    {
      if (event.type == sf::Event::Closed)
      {
        // end the program
        running = false;
      }
      else if (event.type == sf::Event::Resized)
      {
        // adjust the viewport when the window is resized
        //glViewport(0, 0, event.size.width, event.size.height);
      }
    }
   
    // clear the buffers
    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    window.clear();
   
    // draw...
    ogreRoot->renderOneFrame();

    // end the current frame (internally swaps the front and back buffers)
    window.display();
  }
 
  // release resources...
  delete myListener;
  delete ogreRoot;
   
  return 0;
}
 

3
Graphics / Re: 2D drawing canvas
« on: June 10, 2013, 07:17:45 pm »
You can use Googles Skia Library

Note: Might not work out of the box
#include <SFML/Graphics.hpp>
#include "SkCanvas.h"
#include "SkGraphics.h"
#include "SkImageEncoder.h"
#include "SkString.h"
#include "SkTemplates.h"
#include "SkTypeface.h"
 
#include <iostream>
 
// g++ main.cpp -Wl,-rpath,./ -L. -lskia -Iinclude/core -Iinclude/config -Iinclude/images -lpthread -lfreetype -lpng -lsfml-window -lsfml-graphics -lsfml-system
 
using namespace std;
 
int main(int argc, char **argv) {
 
  int width = 800;
  int height = 600;
 
  // Create the main window
  sf::RenderWindow window(sf::VideoMode(width, height), "SFML window");
  sf::Image image;
 
 
 
    SkAutoGraphics ag;
 
    //Set Text To Draw
    SkString text("Hydra Skia v0.0.1a");
 
    SkPaint paint;
 
    //Set Text ARGB Color
    paint.setARGB(255, 255, 255, 255);
 
    //Turn AntiAliasing On
    paint.setAntiAlias(true);
    paint.setLCDRenderText(true);
    paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));
 
    //Set Text Size
    paint.setTextSize(SkIntToScalar(20));
 
    SkBitmap bitmap;
    bitmap.setConfig(SkBitmap::kARGB_8888_Config, width / 2, height);
    bitmap.allocPixels();
 
    //Create Canvas
    SkCanvas canvas(bitmap);
    canvas.drawARGB(100, 25, 25, 25);
 
    //Text X, Y Position Varibles
    int x = 80;
    int y = 60;
 
    canvas.drawText(text.c_str(), text.size(), x, y, paint);
 
    //Set Style and Stroke Width
    paint.setStyle(SkPaint::kStroke_Style);
    paint.setStrokeWidth(3);
 
    //Draw A Rectangle
    SkRect rect;
    paint.setARGB(255, 0, 0, 0);
    //Left, Top, Right, Bottom
    rect.set(50, 100, 200, 200);
    canvas.drawRoundRect(rect, 20, 20, paint);
 
    canvas.drawOval(rect, paint);
 
    //Draw A Line
    canvas.drawLine(10, 300, 300, 300, paint);
 
    //Draw Circle (X, Y, Size, Paint)
    canvas.drawCircle(100, 400, 50, paint);
 
 
    image.Create(bitmap.width(), bitmap.height(), reinterpret_cast<const sf::Uint8*>(bitmap.getPixels()));
 
  // Load a sprite to display
  sf::Texture texture;
  if (!texture.LoadFromImage(image))
          return EXIT_FAILURE;
 
  sf::Sprite sprite(texture);
  //sprite.SetPosition(100, 100);
  //sprite.Resize(400, 400);
 
  // Load a sprite to display
  sf::Texture tex;
  if (!tex.LoadFromFile("background.jpg"))
         return EXIT_FAILURE;
  sf::Sprite texs(tex);
 
 
  // Start the game loop
  while (window.IsOpened())
  {
 
         // Process events
         sf::Event event;
         while (window.PollEvent(event))
         {
             // Close window : exit
             if (event.Type == sf::Event::Closed)
                 window.Close();
         }
 
         // Clear screen
         window.Clear();
 
         window.Draw(texs);
         window.Draw(sprite);
 
         // Update the window
         window.Display();
 
     }
 
 
 
     return EXIT_SUCCESS;
 }
 



The following code demonstrates Skia in a GL Context using GLFW. Note havent converted it to SFML2 yet.
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include "glfw/glfw.h"
 
#include "skia/include/gpu/GrContext.h"
#include "skia/include/gpu/GrRenderTarget.h"
#include "skia/include/gpu/GrGLInterface.h"
#include "skia/include/gpu/SkGpuDevice.h"
#include "skia/include/gpu/SkGpuCanvas.h"
#include "skia/include/gpu/SkNativeGLContext.h"
#include "skia/include/core/SkCanvas.h"
#include "skia/include/core/SkGraphics.h"
 
int main( int ac,char** av )
{
    SkAutoGraphics ag;
    int window_width = 800,
         window_height = 600;
    //*
    if( glfwInit() == GL_FALSE )
    {
        printf( "Could not initialize GLFW. Aborting.\n" );
        exit( 0 );
    }
 
    // This function calls wglMakeCurrent somewhere in its execution, so make sure that (or its platform specific equivalent) it is called when porting to other frameworks.
    if (glfwOpenWindow(window_width, window_height, 8,8,8,8,24,8, GLFW_WINDOW) == GL_FALSE)
    {
        printf( "Could not open GLFW window. Aborting.\n" );
        exit( 0 );
    }
    // */
 
    const GrGLInterface* fGL = GrGLCreateNativeInterface();
    GrContext* fGrContext = GrContext::Create( kOpenGL_Shaders_GrEngine,(GrPlatform3DContext)fGL );
    if( fGrContext == 0x0 )
    {
        printf("\nfGrContext was null");
        exit( 0 );
    }
 
 
    GrRenderTarget* fGrRenderTarget;)
 
 
    GrPlatformRenderTargetDesc desc;)
    desc.fWidth = window_width;)
    desc.fHeight = window_height;)
    desc.fConfig = kSkia8888_PM_GrPixelConfig;)
    GR_GL_GetIntegerv(fGL, GR_GL_SAMPLES, &desc.fSampleCnt);)
    GR_GL_GetIntegerv(fGL, GR_GL_STENCIL_BITS, &desc.fStencilBits);)
    GrGLint buffer;)
    GR_GL_GetIntegerv(fGL, GR_GL_FRAMEBUFFER_BINDING, &buffer);)
    desc.fRenderTargetHandle = buffer;
 
    // I had some serious trouble with segmentation faults and failures arising from this function. Perhaps some more robust error checking is in order?
    fGrRenderTarget = fGrContext->createPlatformRenderTarget(desc);
 
    // Canvi (Canvasses?) only really care about the device they contain, so you can ignore the SkGpuCanvas.
    SkCanvas* gpuCanvas = new SkCanvas();
    gpuCanvas->setDevice(new SkGpuDevice(fGrContext,fGrRenderTarget))->unref();
 
    glfwSetWindowTitle( "Skia GLFW Test" );
 
    while( true )
    {
        // Draw a red background with a gray, semi-transparent circle in the top left corner.
        gpuCanvas->drawColor( SK_ColorRED );
        SkRect r(SkRect::MakeWH(200,200));
        SkPaint p;
        p.setARGB( 200,100,100,100 );
        gpuCanvas->drawOval( r,p );
 
        glfwSwapBuffers();
        fGrContext->flush(false);
        Sleep( 1 );
    }
    return 1;
}
 

Or you could use the Nvidia Path Rendering Ext and just feed it pure SVG or Postscript

4
Stellar.

Is there any way you could upload your assets?

I can just as easily google and download a random .3ds, but seeings as yours is proven to work I would rather yours. If you don't mind, of course. :D

Ohhh sorry I didn't realize anyone had posted on this topic.  I will look into getting an example online but to be truthful I am having a little trouble with this example my self.

1. With Lights and Materials added no models are showing up.
2. I cant seam to get models textures to show.
3. Model Animation is an issue also.

I am still working on it but I have some good news, I have osgOcean(Ocean Simulator), osgPPU(HDR, Bloom, ... Effects, osgBullet(Physics) and osgRocket(LibRocket) and Googles 2D Graphics Library (Skia) all working out of the box. Once i solve the above issue then we will have pretty much a  complete 3D Game Engine in SFML2.

5
Here is an update that works with the new SFML2 api style.

// g++ main.cpp -o main -lsfml-window -lsfml-graphics -lsfml-system -losg -losgDB -losgGA -losgUtil

#include <SFML/Graphics.hpp>

#include <osgUtil/SceneView>
#include <osg/Node>
#include <osg/CameraNode>
#include <osg/Group>
#include <osgDB/ReadFile>
#include <osg/PositionAttitudeTransform>


int  main()
{
        // Create Game Window with Title
        sf::RenderWindow window(sf::VideoMode(800, 600, 32), "SFML2 OpenSceneGraph Example1");
       
        // Create & Load Splashscreen Image
        sf::Texture texture;
        if (!texture.loadFromFile("data/background.png"))
                return EXIT_FAILURE;
        sf::Sprite sprite(texture);


        // Create 3D Viewport
        osgUtil::SceneView* viewer = new osgUtil::SceneView();
        viewer->setDefaults();
 
        // Create Camera
        osg::Camera* camera;
        camera = viewer->getCamera();
        camera->setViewport(0, 0, 640, 480); // Set 3D Viewport Position and Size
        camera->setClearColor(osg::Vec4(0, 0, 0, 0)); // Set Scene Background Color

        // Create Root Scene Node
        osg::Group* root = new osg::Group();
 
        // Transformation Object for our 3D Model
        osg::PositionAttitudeTransform* meshTrans = new osg::PositionAttitudeTransform();
        meshTrans->setPosition(osg::Vec3d( 3,  0, -6));

        // Create 3D Model, Apply Transformation
        osg::Node* mesh = osgDB::readNodeFile("data/untitled.3ds");
        root->addChild(meshTrans); // Add Trasformation to Scene
        meshTrans->addChild(mesh); // Add 3D Model to Transformation
         
        // Set Root Scene Node to View and Init Vew
        viewer->setSceneData(root);
        viewer->init();


        // Start the Game Loop
        while (window.isOpen())
        {
                // Process events
                sf::Event event;
                while (window.pollEvent(event))
                {
                        // Close window : exit
                        if (event.type == sf::Event::Closed)
                                window.close();
                }
         
                window.clear();        
                window.draw(sprite);
       
                window.pushGLStates();
                viewer->update();
                viewer->cull();
                viewer->draw();
                window.popGLStates();

                window.display();
        }
}
 

6
Graphics / sdl user but I'll switch
« on: January 18, 2012, 06:40:14 pm »
Quote from: "dydya-stepa"
I have no idea how to send messages to other users.

I have a question to caracal:

you mention you have lots of samples with graphics libraries. I'm looking for an algorithm of a glow - maybe you know what options might be?

http://www.sfml-dev.org/forum/viewtopic.php?t=6629


Ummm I am the wrong person to ask about shaders. I am the "Cairo, QPainter, Skia, ImageMadick(Magick++), ... guy.

Hell I could even show you how to integrate OpenSceneGraph.

Shaders are beyond my capability's :) sorry

If you have a question just ask, here on the forums. I am unlikely to answer any private messages.

7
Graphics / sdl user but I'll switch
« on: January 17, 2012, 12:54:19 am »
You can use pretty much any 2d graphics library "Cairo, Pixman, QPainter, AGG, Fog Framework, Skia, ImageMagick" to do your drawing and then just
copy the the pixel buffer to a sfml Image.

Here is a ImageMagick (Magick++) Example

Code: [Select]

  sf::Image image;

  Image im("picture.png");;
  Blob blob;

  im.magick("RGBA");
  im.swirl( 100 );
  im.write(&blob);
 
  image.Create(im.columns(), im.rows(), reinterpret_cast<const sf::Uint8*>(blob.data()));
 
  // Load a sprite to display
  sf::Texture texture;
  if (!texture.LoadFromImage(image))
          return EXIT_FAILURE;



If your interested I have examples for all the above 2d graphics engine except AGG. Let me know and Ill prepair them for you :)

8
SFML projects / Premake Build System for SFML
« on: January 15, 2012, 02:10:10 am »
Yahh I am going to have to second that Cmake totaly sucks I also use premake. But I take it a bit further I convert my distros packages build scripts
to premake :) The latest one that I did was Poco C++ libs. SFML2 will be the next one I convert over to premake once it's stable.

9
Graphics / Why does this not work properly?
« on: January 10, 2012, 01:11:05 pm »
Quote from: "kingsman142"
I'm sorry Nexus and Tau Sudan.  Caracal is right.  I was irritated with this problem so much and I couldn't find a response and I became impacient so I took it out on these forums.  I apologize for the anger.  I will look into that tread the next time I'm going to post something new Nexus.  And Caracal, I'll remember to keep those things in mind and try to fix the problem.  I enjoyed reading your post.


Happens to me all the time just yesterday I was building a custom scenegraph, worked on a problem i had with the code for 5 hours.
Got mad almost threw my keyboard. But I didn't I went and took a nap
and when I woke up, Right away I seen the problem and fixed it.

10
Graphics / Why does this not work properly?
« on: January 10, 2012, 12:45:23 pm »
I see a few things wrong here.

1. Your trying to work on a problem when your
obviously irritated. Tip: Don't force it, walk away
from it for awhile or work on something else.

2. Design Patterns and Control Flow.
Your just dumping a heap of code that does what you want
into a mouse press event. Research callbacks and signal & slots.
The way your doing it now is just asking for problems.

3. Post all of your code so we can take a look, compile it tinker with
it and find the issue and make our suggestions, or give proper feedback.

4. Be kind and polite. This is an open community, no one has to help you
but if your kind, polite and help others when you can. Then others will help
you.

11
General discussions / cross-platform c++ resource container library?
« on: January 07, 2012, 05:16:52 pm »
Try googles snappy library http://code.google.com/p/snappy/ the readme is here http://code.google.com/p/snappy/source/browse/trunk/README

I am looking at packing my data into Googles protocol buffers and compressing that with snappy.

Personally I would use any decent zip library because zip is supported on every platform its fast with decent compression and it does both compression and archiving.

12
Graphics / qimage to sf::image conversion
« on: January 02, 2012, 06:33:16 am »
Not to be a necromancer on this topic but I just ran into the same problem
here is how I solved it.

Code: [Select]

     QImage res = QImage(320, 320, QImage::Format_ARGB32);
     res.load("test.png");
     res = res.rgbSwapped();


     sf::Image image;
     image.Create(res.width(), res.height(), reinterpret_cast<const sf::Uint8*>(res.bits()));

13
General discussions / SFML2 & OpenSceneGraph (Here is a Code Example)
« on: January 01, 2012, 11:57:58 am »
I see the same question asked over and over again how do you
get 3d graphics in sfml? Well here is a simple example.

All you need is SFML2 and OpenSceneGraph v3

Code: [Select]


// g++ main.cpp -o main -lsfml-window -lsfml-graphics -lsfml-system -losg -losgDB -losgGA -losgUtil

#include <SFML/Graphics.hpp>

#include <osgUtil/SceneView>
#include <osg/Node>
#include <osg/CameraNode>
#include <osg/Group>
#include <osgDB/ReadFile>
#include <osg/PositionAttitudeTransform>


int  main()
{
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "SFML2 OpenSceneGraph Example1");


    // Load a sprite to display
    sf::Texture texture;
    if (!texture.LoadFromFile("../data/background.jpg"))
        return EXIT_FAILURE;
    sf::Sprite sprite(texture);
     
     

        // OSG Code Start
       
         // View
osgUtil::SceneView* viewer = new osgUtil::SceneView();
viewer->setDefaults();
 
        // Camera
        osg::Camera* camera;
camera = viewer->getCamera();
camera->setViewport(20, 20, 640, 480);
camera->setClearColor(osg::Vec4(0, 0, 0, 0));

        // Root Scene Node
osg::Group* root = new osg::Group();
 
        // Transformation Object for our 3D Model
osg::PositionAttitudeTransform* meshTrans = new          
        osg::PositionAttitudeTransform();
meshTrans->setPosition(osg::Vec3d( 3,  0, -6));

        // 3D Model
osg::Node* mesh = osgDB::readNodeFile("../data/ship.3ds");
root->addChild(meshTrans);
meshTrans->addChild(mesh);

        // Set Root Scene Node to View and Init Vew
viewer->setSceneData(root);
viewer->init();

       // OSG Code End


// Start the game loop
        while (window.IsOpened())
        {
        // Process events
          sf::Event event;
          while (window.PollEvent(event))
          {
              // Close window : exit
              if (event.Type == sf::Event::Closed)
                  window.Close();
          }
         
        window.Clear();
       
        window.Draw(sprite);
       

                // OSG Code Start

        window.SaveGLStates();
viewer->update();
viewer->cull();
viewer->draw();
window.RestoreGLStates();

                // OSG Code End


window.Display();
}
}


Screenshot



Hope that helps

14
SFML projects / Zester Project (Software Development Toolkit)
« on: June 16, 2010, 05:12:17 pm »
Quote from: "e_barroga"
Just curious, why did you use Horde3D?

I think Ogre3D is more powerful and flexible. It is also as open-source as Horde3D (as far as I know).


I am not a big fan of C++ Templates which Ogre3D make extensive use of.
So basically my decision came down to ease of use.

15
SFML projects / Zester Project (Software Development Toolkit)
« on: June 15, 2010, 08:21:53 pm »
Ill have to write a Windows and Mac port of the Windows Management Library but besides that everything else is cross-platform.

Pages: [1] 2
anything